2016-04-24 5 views
0

Ich möchte die MAC-Adresse aller an das Netzwerk angeschlossenen Geräte erhalten. [in einem Skript - alle Windows-Umgebung]Gibt es eine Möglichkeit, den Befehl arp -a cmd im Python-Skript auszuführen?

Ich entschied mich dafür, Python zu verwenden. Ich habe nmap dafür benutzt.

import nmap 
nm = nmap.PortScanner() 
nm.scan('127.0.0.1', '22-443') 
#nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389') 
nm.scan(hosts = '192.168.1.0/24', arguments = '-n -sP -PE -T5') 
for host in nm.all_hosts(): 
    mac = nm[host]['addresses']['mac'] 
    print("mac " + mac) 

[Das Problem mit dieser Methode ist, dass es manchmal einige Geräte vermisst. Bedeutung, Wenn 5 Geräte an den Router angeschlossen sind und ich das Skript zum ersten Mal ausführe, werden nur ein oder zwei Geräte zurückgegeben. Nächstes Mal, wenn ich das Skript ausführen wird es zurückgeben alle 5, drittes Mal ein nur sein kann ... so.]

Wo, wie, wenn ich öffnen Eingabeaufforderung, und tun,

arp -a 

Es funktioniert perfekt jeder Zeit.

Also meine Frage ist, dass es eine Möglichkeit gibt, konnte ich das Ergebnis von cmd in Python-Skript analysieren?

Ich schaute auf os.popen (.. ?? ..), Aber ich bin nicht in der Lage, genau zu verstehen, wie kann ich das tun? Gibt es dafür eine gute Bibliothek? https://pypi.python.org/pypi/arprequest/0.3

Antwort

2

Sie sollten sich das Modul subprocess ansehen. Sie wollen wahrscheinlich die check_output Methode verwenden:

import subprocess 
output = subprocess.check_output(("arp", "-a")) 
# Parse output here 

check_output ein str Objekt in Python 2 und ein bytes Objekt in Python 3 zurückzukehren, die Sie mit output.decode("ascii") zum Beispiel umwandeln können.

Verwandte Themen