来自python脚本的ARP填充不起作用

问题描述 投票:0回答:1

我试图通过填充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"])

但这并没有什么不同。

python networking nmap
1个回答
0
投票

这个问题最终与Python代码无关。

nmap -sP通常将ICMP-echo-r​​equests发送到指定网络中的所有IP。虽然文档中提到了一个例外:

当特权用户尝试扫描本地以太网网络上的目标时,除非指定了--send-ip,否则将使用ARP请求>。

这也导致无论何时将命令作为sudo发送(如我的情况),除非附加了--send-ip,否则不会填充ARP缓存。

© www.soinside.com 2019 - 2024. All rights reserved.