【发布时间】:2013-03-14 10:59:55
【问题描述】:
在 Python 中有没有什么快速的方法来获取默认网关的MAC地址?
我无法从运行我的代码的 Linux 机器发出任何 ARP 请求,因此它必须直接来自 ARP 表。
【问题讨论】:
-
你应该说你正在使用哪个操作系统。
-
操作。对不起。现已添加。
标签: python linux ip mac-address arp
在 Python 中有没有什么快速的方法来获取默认网关的MAC地址?
我无法从运行我的代码的 Linux 机器发出任何 ARP 请求,因此它必须直接来自 ARP 表。
【问题讨论】:
标签: python linux ip mac-address 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请求。
你可以在/proc/net/route找到默认gw
【讨论】: