【问题标题】:Python: get MAC address of default gatewayPython:获取默认网关的 MAC 地址
【发布时间】:2013-03-14 10:59:55
【问题描述】:

在 Python 中有没有什么快速的方法来获取默认网关MAC地址

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

【问题讨论】:

  • 你应该说你正在使用哪个操作系统。
  • 操作。对不起。现已添加。

标签: python linux ip mac-address arp


【解决方案1】:

以下 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,然后再次检查,然后失败。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 只是出于好奇,在 Mac OS 上也可以这样吗?
    • 不确定MacOS...看看this post
    【解决方案3】:

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

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

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

    【讨论】:

    • 哦,好的。我认为已经有一些图书馆为我做解析工作。行。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2011-07-19
    • 2011-02-15
    • 1970-01-01
    • 2011-10-10
    • 2012-11-18
    相关资源
    最近更新 更多