Python:获取默认网关的MAC地址
有没有什么简单的方法可以在Python中获取默认网关的MAC地址?
因为我在运行代码的Linux机器上无法发送任何ARP请求,所以这个信息必须直接从ARP表中获取。
3 个回答
2
你可以从 /proc/net/arp
这个文件里读取信息,并解析里面的内容,这样你就能得到一些已知的IP地址和MAC地址的配对。
网关通常是一直可以知道的,如果不知道的话,你可以用ping命令去测试一下,这样系统会自动发送一个ARP请求。
你可以在 /proc/net/route
这个文件里找到默认的网关。
2
你在用Linux吗?你可以查看一下/proc/net/arp
这个文件。里面有你网关的硬件地址。
2
以下的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
然后转换网关字段(它是小端格式的十六进制...真让人头疼):
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命令,然后再检查一次,最后可能会失败。