2016-04-24 8 views
0

Я хочу получить MAC-адрес всего устройства, подключенного к сети. [в скрипте - вся среда окон]Есть ли способ выполнить команду arp -a cmd в скрипте python?

Я решил использовать для этого python. Я использовал nmap для этого.

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) 

[Проблема с этим методом заключается в том, что когда-то он пропускает несколько устройств. Значение, Если подключено к маршрутизатору 5 устройств, и я запускаю сценарий впервые, он вернет только одно или два устройства. В следующий раз я бегу сценарий он будет возвращать все 5, третий раз может быть только один ... как это.]

Где, как если бы я открыть окно командной строки и делать,

arp -a 

Он отлично работает каждый время.

Итак, мой вопрос в том, что я могу проанализировать результат из cmd в сценарии python?

Я смотрел на os.popen (.. ?? ..), Но я не могу точно понять, как это сделать? Есть ли хорошая библиотека для этого? https://pypi.python.org/pypi/arprequest/0.3

ответ

2

Вы должны взглянуть на модуль subprocess. Вы, вероятно, хотите использовать check_output метод:

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

check_output возвратит str объект в Python 2, и bytes объект в Python 3, который можно конвертировать с output.decode("ascii"), например.