2008-09-17 8 views
8

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

11

Sie benötigen ARP. Die Standardbibliothek von Python enthält keinen Code dafür, so dass Sie entweder ein externes Programm aufrufen müssen (Ihr Betriebssystem hat möglicherweise ein 'arp' Dienstprogramm) oder Sie müssen die Pakete selbst erstellen (möglicherweise mit einem Tool wie Scapy.

1

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.

0

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).

1

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).

1

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.

0

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.

0

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.

-1

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

ist

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()) 
+0

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

2

This article, scheint "Hand-crafted Ethernet Frames in Python (ARP zum Beispiel) Send" genau das, was Sie suchen.