Ich möchte in meinem Netzwerk nach einer bestimmten MAC-Adresse suchen, und zwar alles innerhalb eines Python-Skripts. Ich habe bereits eine Karte aller aktiven IP-Adressen im Netzwerk, aber ich kann nicht herausfinden, wie man die MAC-Adresse liest. Irgendwelche Ideen?
Dieser Artikel , "Senden Sie handgefertigte Ethernet-Frames in Python (z. B. ARP)", scheint genau das zu sein, wonach du suchst.
Ich glaube nicht, dass es einen eingebauten Weg gibt, um es von Python selbst zu bekommen.
Meine Frage ist, wie erhalten Sie die IP-Informationen von Ihrem Netzwerk?
Um es von Ihrem lokalen Rechner zu bekommen, könnten Sie ifconfig (unix) oder ipconfig (windows) mit wenigen Schwierigkeiten parsen.
Wenn Sie eine reine Python-Lösung haben möchten, können Sie sich Scapy ansehen, um Pakete zu erstellen (Sie müssen dazu) Sende ARP-Anfrage und prüfe Antworten). Oder wenn es Ihnen nichts ausmacht, ein externes Programm aufzurufen, können Sie arping
verwenden (auf Un * x-Systemen kenne ich kein Windows-Äquivalent).
Es scheint, dass es bei Python keine native Methode gibt. Am besten würdest du die Ausgabe von "ipconfig / all" unter Windows oder "ifconfig" unter Linux parsen. Überlegen Sie os.popen () mit einigen Regexps.
Hängt von Ihrer Plattform ab. Wenn Sie * nix verwenden, können Sie mit dem Befehl 'arp' die MAC-Adresse für eine bestimmte IP-Adresse (IPv4-Adresse vorausgesetzt) suchen. Wenn das nicht funktioniert, können Sie die Adresse pingen und dann schauen, oder wenn Sie Zugriff auf das unformatierte Netzwerk haben (mit BPF oder einem anderen Mechanismus), könnten Sie Ihre eigenen ARP-Pakete senden (aber das ist wahrscheinlich übertrieben) / p>
Sie möchten die Ausgabe von 'arp' parsen, aber der Kernel-ARP-Cache enthält nur diese IP-Adresse (n), wenn diese Hosts mit dem Host kommuniziert haben, auf dem das Python-Skript läuft.
ifconfig kann verwendet werden, um die MAC-Adressen von lokalen Schnittstellen anzuzeigen, nicht jedoch die im LAN.
Mark Pilgrim beschreibt, wie Sie dies unter Windows für den aktuellen Computer mit dem NetBIOS-Modul hier
Da Python nicht mit OS-spezifischen Problemen umgehen sollte (es soll interpretiert und plattformübergreifend sein), würde ich einen externen Befehl ausführen:
in Unix ist der Befehl ifconfig
Wenn Sie es als eine Pipe ausführen, erhalten Sie das gewünschte Ergebnis:
%Vor%Tags und Links python network-programming