Ich möchte nach einer bestimmten MAC-Adresse in meinem Netzwerk suchen, alles aus einem Python-Skript. Ich habe bereits eine Karte aller aktiven IP-Adressen im Netzwerk, aber ich kann nicht herausfinden, wie man die MAC-Adresse liest. Irgendwelche Ideen?Suche nach Host mit MAC-Adresse mit Python
Antwort
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 wenig Schwierigkeiten parsen.
Abhängig von Ihrer Plattform Wenn Sie * nix verwenden, können Sie den Befehl 'arp' verwenden, um die MAC-Adresse für eine bestimmte IP-Adresse (IPv4-Adresse vorausgesetzt) abzurufen Adresse und dann schauen, oder wenn Sie Zugriff auf das rohe Netzwerk haben (mit BPF oder einem anderen Mechanismus), könnten Sie Ihre eigenen ARP-Pakete senden (aber das ist wahrscheinlich übertrieben).
Wenn Sie eine reine Python-Lösung wollen, Sie können einen Blick auf Scapy werfen, um Pakete zu erstellen (Sie müssen ARP-Anfrage senden und Antworten überprüfen) 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 keine einheimische Methode gibt, dies mit Python zu tun. Am besten würdest du die Ausgabe von "ipconfig/all" unter Windows oder "ifconfig" unter Linux parsen. Erwägen Sie, os.popen() mit einigen regulären Ausdrücken zu verwenden.
Sie möchten die Ausgabe von 'arp' analysieren, 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, aber nicht von denen im LAN.
Mark Pilgrim beschreibt, wie dies unter Windows für die aktuelle Maschine mit dem NetBios-Modul here zu tun ist. Sie können das Netbios-Modul als Teil des unter python.org verfügbaren Win32-Pakets erhalten. Leider kann ich im Moment die Dokumente auf dem Modul nicht finden.
wie Python nicht gemeint war, mit OS-spezifischen Fragen befassen (es soll interpretiert und Cross-Plattform werden), würde ich einen externen Befehl ausführen, dies zu tun:
in Unix das Kommando ifconfig
wenn Sie es als ein Rohr führen Sie das gewünschte Ergebnis erhalten:
import os
myPipe = os.popen2("/sbin/ifconfig","a")
print(myPipe[1].read())
This article, scheint "Hand-crafted Ethernet Frames in Python (ARP zum Beispiel) Send" genau das, was Sie suchen.
Python hat OS-spezifische Module, so denke ich, Sie antworten ist irreführend. Der pythonische Weg, dies zu handhaben, wäre ein Modul, um eine OS-unabhängige Schnittstelle zu haben, die durch OS-spezifische Plugins unterklassifiziert werden könnte. – Walter