2013-03-14 160 views
2

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

我不能作出任何ARP从我跑在我的代码的Linux 请求,因此它具有直接从ARP表来。

+0

你应该说你正在使用的操作系统。 – LtWorf 2013-03-14 11:10:03

+0

行动。抱歉。现在添加。 – 2013-03-14 11:14:13

回答

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十六进制... 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 

如果它没有显示出来,问题单平,然后再检查,再失败。

2

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

+0

只是出于好奇,会在Mac OS相同的工作? – 2014-08-05 13:38:27

+1

不知道有关的MacOS ......看看[此帖](http://stackoverflow.com/questions/6782658/how-to-get-default-gateway-in-mac-osx)。 – liouk 2014-08-06 14:08:12

2

您可以从/proc/net/arp读取和解析的内容,会给你已知IP-MAC地址的夫妇。

网关大概知道在任何时候,如果你不应该ping到它,以及一个ARP请求将被自动生成。

你可以找到/proc/net/route

+0

哦,好的。我以为有一些图书馆已经为我做了解析工作。好。 :) – 2013-03-14 11:20:42