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:
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); } |
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!
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