我想获取连接到网络的所有设备的mac地址。 [在脚本中 - 所有Windows环境]
我决定使用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
每次都很完美。
所以我的问题是,有没有办法可以解析python脚本中cmd的结果?
我查看了os.popen(.. ?? ..), 但我无法完全理解我该怎么做? 有没有好的图书馆?https://pypi.python.org/pypi/arprequest/0.3
答案 0 :(得分:3)
您应该查看subprocess模块。您可能想要使用check_output
方法:
import subprocess
output = subprocess.check_output(("arp", "-a"))
# Parse output here
check_output
将返回python 2中的str
对象,以及python 3中的bytes
对象,您可以使用output.decode("ascii")
进行转换。