我试图通过填充ARP缓存并从中读取来获取网络中设备的IP(我知道它的MAC):
def getIP(mac):
os.system("nmap -sP 192.168.1.0/24 >/dev/null")
ip_line = sub.getoutput("ip n | grep "+ mac)
if ip_line == '':
return ''
else:
return ip_line.split()[0]
但是,调用nmap的命令似乎没有填充arp缓存,因为它保持为空。当我手动执行nmap命令时,它可以工作。
我已经尝试将os.system替换为
cp = sub.run(["nmap", "-sP", "192.168.1.0/24", ">/dev/null"])
这没什么区别。
答案 0 :(得分:0)
这个问题最终与Python代码无关。
nmap -sP通常将ICMP-echo-requests发送到指定网络中的所有IP。 尽管在文档中提到了一个例外:
当特权用户尝试扫描本地以太网上的目标时,除非指定了--send-ip,否则将使用ARP请求。
这还导致以下事实:每当命令以sudo形式发送时(如我的情况),除非附加了--send-ip,否则不会填充ARP缓存。