我正在构建一个微型项目,遇到了这个问题。.我必须找到我的家庭网络中所有设备的MAC地址。在这里,我获得了所有设备的本地IP地址(从1 ping到255)并记下所有响应的设备IP)。在此,我将Windows与python 2.7.x配合使用。我也需要网卡制造商名称。 换句话说,我只想要WI-FI Watcher显示的原始数据。
我的目标是获得MAC和网卡制造商的名称
答案 0 :(得分:0)
首先,请确保您对子网中的主机执行 all 操作。我会先对broadcast address进行ping操作,然后再以防万一,可能其中一些没有响应您的广播。
这样,您将填充计算机的本地ARP缓存。然后,您可以运行此可执行文件:
arp -a -v
这将输出有关所有IP地址及其对应的MAC地址的信息。
然后,只需查找MAC地址的OUI。
在纯Python中,正如您在评论中提到的那样,您可以使用“ Scapy”。您可以在此处找到ARP ping示例:
https://freezion.com/2009/01/22/arp-ping-using-scapy/
基本上:
from scapy import srp,Ether,ARP,conf
conf.verb=0
ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=sys.argv[1]),
timeout=2)
对于OUI查找,尽管它具有外部依赖性,但是您可以使用以下代码:
import requests
for addr in ['88:53:2E:67:07:BE', 'FC:FB:FB:01:FA:21',
'D4:F4:6F:C9:EF:8D', '23:45:67']:
vendor = requests.get('http://api.macvendors.com/' + addr).text
print(addr, vendor)
此外,您可以尝试来自Wireshark的OUI parser lib。
注意:如果在目标主机上禁用了ICMP,则此方法不起作用,在这种情况下,您必须运行传统的portcan并查找打开的端口。