有没有办法在 python 脚本中执行 arp -a cmd 命令?

Is there a way to execute arp -a cmd command in python script?

我想获取 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 个设备连接到路由器,并且我第一次 运行 脚本,它将 return 只有一个或两个设备。下次我 运行 脚本它会 return 全部 5,第三次可能只有一个......就像那样。]

好像我打开命令提示符并执行,

arp -a

每次都完美运行。

所以我的问题是,有没有办法在 python 脚本中解析 cmd 的结果?

我看了 os.popen(..??..), 但我无法确切地理解我该怎么做? 有什么好的图书馆吗?https://pypi.python.org/pypi/arprequest/0.3

您应该看看 subprocess 模块。您可能想使用 check_output 方法:

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

check_output 将 return python 2 中的 str 对象和 python 3 中的 bytes 对象,您可以将其转换例如 output.decode("ascii")