Frage

Derzeit analysieren wir die Ausgabe von ARP -Anforderungen aus der Befehlszeile.

string cmd = "arp -n ";
cmd.append(ipaddress);
cmd.append(" | grep ");
cmd.append(ipaddress);
fgets( line, 130, fp);
fgets( line, 130, fp);
ret.append(line);
 ...

Es funktioniert, aber gibt es eine Möglichkeit, dies mit einer Bibliotheksfunktion zu tun, die nicht so stark von der nativen Befehlszeilenschnittstelle abhängt? Das Projekt verwendet derzeit LIBPCAP.

War es hilfreich?

Lösung

Im Allgemeinen hängt dies von Ihrem Betriebssystem ab. Dafür gibt es keine wirkliche Standard -API.

Angenommen, Sie sind unter Linux, Open und Parse/Proc/Net/ARP. Das Format ähnelt dem der Ausgabe aus dem ARP -Befehl. Beachten Sie, dass Sie mindestens kurz ein Paket an die fragliche IP senden müssen, um es in der ARP -Tabelle zu haben, und natürlich werden Sie nichts außerhalb Ihres lokalen Segments bekommen.

Wenn Sie eine IP in diesen Cache einholen, ist einfach genug - senden Sie beispielsweise ein UDP -Paket an einen nicht verwendeten Port an, bis es angezeigt wird.

Eine andere Alternative wäre die Verwendung eines Rohstecks, um Ihr eigenes ARP -Paket zu erstellen und zu senden, aber das ist viel komplexer :) Wenn Sie diesen Weg gehen möchten, studieren Sie den Quellcode für den Quellcode für Arping (Seite ist heute unten, aber die Git Repo ist online), was Ihnen möglicherweise auch etwas mehr Portabilität durch Verwendung plattformunabhängiger Bibliotheken wie libpcap verleiht (aber Root erfordert)

Andere Tipps

Ich mache mir ein wenig Sorgen um die

Rufen Sie die MAC -Adresse des ausländischen Hosts ab

Teil Ihrer Frage.

Ich hoffe, dass Sie wissen, dass Sie nur Einträge in der ARP -Tabelle für Maschinen im selben Netzwerk erhalten. Wenn Sie über einen Router eine Verbindung zu einer Maschine herstellen, sehen Sie nur die MAC -Adresse der Router in der ARP -Tabelle. Es gibt also keine Möglichkeit, das zu kennen MAC -Adresse des ausländischen Hosts Es sei denn, es ist ein Host im selben Netzwerk (keine beteiligten Router).

Die Antwort lautet also, dass es für Hosts, die über einen Router erreicht werden, unmöglich ist. Wenn der Host im lokalen Netzwerk erreichbar ist, können Sie nur plattformspezifische Zugriffsmethoden verwenden, da auch die Ausgabe des ARP -Befehls zwischen den Plattformen unterschiedlich sein kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top