3

Python中有没有快速获取默认网关的MAC地址的方法?

我无法从正在运行我的代码的Linux机器发出任何ARP 请求,因此它必须直接来自ARP 表

4

3 回答 3

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                                                                             

并转换网关字段(它是 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,然后再次检查,然后失败。

于 2013-03-14T11:20:27.317 回答
2

你在使用 Linux 吗?你可以解析/proc/net/arp文件。它包含网关的硬件地址。

于 2013-03-14T11:07:40.000 回答
2

您可以读取/proc/net/arp并解析内容,这将为您提供几个已知的 IP-MAC 地址。

网关可能一直都是已知的,如果不是,您应该 ping 它,并且会自动生成一个 ARP 请求。

您可以在中找到默认 gw/proc/net/route

于 2013-03-14T11:09:08.167 回答