Autor Beitrag
Red2Devil
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 27.02.10 14:16 
Hallo,

Ich habe versucht über einen Prozess die arp-Tabelle abzurufen und zu speichern, um alle verfügbaren IPadressen zu bekommen. Zuvor hab ich nun noch eine Ping-schleife gebaut, die alle rechner im subnetz anpingen soll, da sonst die arp-tabelle nicht gefüllt ist und er keine Rechner anzeigt! Ich weiß leider nicht, ob es der richtige Weg ist bzw ob es es eine einfachere Methode gibt:

Ping-schleife und Arp-Tabelle:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
for (int i = 0; i < 200; i++)
{
     Ping pingSender = new Ping();
     PingOptions options = new PingOptions();
     options.DontFragment = true;
     String ip;
     ip = "192.168.1." + i.ToString();
     string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
     byte[] buffer = Encoding.ASCII.GetBytes(data);
     int timeout = 60;
     pingSender.SendAsync(ip, timeout, buffer, options);
     //pingSender.Dispose();
}


Die IP-Adressse (hier 192.168.1.xxx) soll später noch variabel von der eigenen IP aus gesteuert werden, sofern die Methode behaupt sinnvoll ist!


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
Process proc = new Process();

proc.StartInfo.FileName = Environment.SystemDirectory + @"\arp.exe";
proc.StartInfo.Arguments = "-a";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;

proc.Start();

while (!proc.StandardOutput.EndOfStream)
{
    fullLine.Add(proc.StandardOutput.ReadLine());
}

proc.WaitForExit();
proc.Close();


Das ist der Prozess der die cmd mit der Arp-Tabelle aufruft, die später weiterverarbeitet wird!
Mein Problemt dabei ist, dass es sehr lange dauert, alle PCs im Netzwerk anzupingen und danach von der Arp-Tabelle auszulesen.

Ist das überhaupt ein richtiger Ansatz oder gibt es einfachere und schnellere Wege an alle IPs zu gelangen, die im Netzwerk verbunden sind!?

Schonmal danke für eure Hilfe.

Mfg

Marcel


Zuletzt bearbeitet von Red2Devil am So 28.03.10 19:16, insgesamt 1-mal bearbeitet
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 01.03.10 08:24 
Hallo,

abgesehen davon, dass es langsam ist, wirst du durch an-pingen nicht erfahren ob es den Rechner wirklich gibt oder nicht. Viele Betriebssysteme bzw. Konfigurationen reagieren nicht auf diese Anfragen. Ich denke die arp-Tabelle hilft dir dabei dann auch nicht weiter.

Es funktioniert so lange, weil von jedem Rechner von dem du keine Antwort bekommst (und das sind bestimmt sehr viele ;)) musst du den TimeOut abwarten. Wenn du den TimeOut also nach unten schraubst sollte es schneller gehen - meines Erachtens kannst du den TimeOut auf 1 Sekunde vlt. 2 Sekunden runter setzen.

Gruß Daniel
DevInet
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win XP, Win 7 Prof., Linux Mandriva
C#(VS 2010), Java, php
BeitragVerfasst: Di 24.08.10 17:50 
An deiner stelle würde ich mir alle IPs, bei denen du keinen timeout hattest in die Liste schreiben lassen und nicht nur die, die eine Antwort zurückgeliefert haben.

Mfg DevInet