【问题标题】:Get MAC address of NIC that has the default route获取默认路由的网卡MAC地址
【发布时间】:2015-06-15 15:13:31
【问题描述】:

我需要找到在python中分配了默认路由的网络接口卡的MAC地址。用 Python。 现在我尝试了解决方案:

process = os.popen('wmic nic get MACAddress')
result = process.read()
process.close()
print result.split("  \r\n")[1:-1][0]

或:

from uuid import getnode as get_mac
':'.join(("%012X" % mac)[i:i+2] for i in range(0, 12, 2))

当我只有 1 个局域网时它可以工作,但是当我有一些带有 MAC 的 wmware 适配器时,有时我会得到那个 MAC。

如何获取默认路由的MAC地址?

【问题讨论】:

  • 在具有多个物理接口的系统上,哪个是“真实”地址?
  • 电脑没有MAC地址,网卡有MAC地址。你总是会冒着拥有不止一个的风险。你想要默认路由的网卡的MAC地址吗?请更好地解释你想要哪一个。
  • @firelynx 是的,默认路由的网卡MAC地址。

标签: python mac-address wmic


【解决方案1】:

正如@fyrelinx 所说,没有“真实”MAC 地址,但您可以使用sub process 模块通过操作系统的命令行获取具有默认路由的接口,下一个命令适用于 OSX:

>>> subprocess.call(["route", "-n", "get", "default"])
   route to: default
destination: default
       mask: default
    gateway: 192.168.0.1
  interface: **en1**
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0

然后您可以使用 netifaces on pypi 获取该特定接口的 mac 地址(在我的情况下为“en1”),如 this discussion 所示:

import netifaces as nif


netifaces.ifaddresses('en1')
try:
    if_mac = addrs[nif.AF_LINK][0]['addr']
except IndexError, KeyError:
    pass

【讨论】:

  • netifaces,那是第 3 方库吗?
  • 是的,我添加了 pypi 链接以获取更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 2015-10-07
相关资源
最近更新 更多