Python:获取默认网关的MAC地址

3 投票
3 回答
5474 浏览
提问于 2025-04-17 19:04

有没有什么简单的方法可以在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命令,然后再检查一次,最后可能会失败。

撰写回答