Python中有没有快速获取默认网关的MAC地址的方法?
我无法从正在运行我的代码的Linux机器发出任何ARP 请求,因此它必须直接来自ARP 表。
Python中有没有快速获取默认网关的MAC地址的方法?
我无法从正在运行我的代码的Linux机器发出任何ARP 请求,因此它必须直接来自ARP 表。
以下 DevFS 文件将提供此信息:
/proc/net/arp
/proc/net/route
查找以 0/0 作为主机/掩码的路由条目:
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
eth0 00000000 B91A210A 0003 0 0 100 00000000 0 0 0
并转换网关字段(它是 little-endian hex...grr):
import struct
from IPy import IP
address = IP(struct.unpack('<I', struct.pack('>I', int(i, 16)))[0])
#Converts 'B91A210A' to IP('10.33.26.185')
从那里,您可以在 arp 表中找到您的默认网关:
IP address HW type Flags HW address Mask Device
10.33.26.185 0x1 0x2 e6:92:ec:f5:af:f7 * eth0
如果它没有出现,发出一个 ping,然后再次检查,然后失败。
你在使用 Linux 吗?你可以解析/proc/net/arp
文件。它包含网关的硬件地址。
您可以读取/proc/net/arp
并解析内容,这将为您提供几个已知的 IP-MAC 地址。
网关可能一直都是已知的,如果不是,您应该 ping 它,并且会自动生成一个 ARP 请求。
您可以在中找到默认 gw/proc/net/route