【问题标题】:python netifaces - How to get currently used network interfacepython netifaces - 如何获取当前使用的网络接口
【发布时间】:2015-08-22 07:01:05
【问题描述】:

我在 python 中使用 netifaces 来获取本地 IP 地址,但是如何选择当前使用的(由系统)网络接口?请帮帮我。谢谢!

【问题讨论】:

  • “当前使用”是什么意思?一个系统可能有多个活动网络接口(每个接口可能有多个 ip 地址)。
  • 我的意思是首选网络接口。例如,我有 eth0 和 wlan0。 eth0 是首选接口,这是我想要的。
  • 如何“首选”?你的意思是,“我如何确定哪个接口被用作默认路由?”
  • 是的,有人这么想。只需确定python中当前使用的接口
  • 示例:mymac = "getHwAddr('确定当前使用的接口')"

标签: python linux ip-address


【解决方案1】:

仍然不完全清楚你在问什么,因为系统不一定有一个单一的“使用”界面。一个系统可能有多个带有地址的接口,并且可能使用所有这些接口来联系不同的系统。

系统通常(但不总是!)有一个“默认路由”出一个接口,该接口通常用于联系系统未直接连接的主机。如果这是您想要的,您可以使用 Python netifaces 模块,如下所示:

>>> import netifaces
>>> def_gw_device = netifaces.gateways()['default'][netifaces.AF_INET][1]

这将为您获取默认 IPv4 路由使用的设备的名称。您可以像这样获取该接口的 MAC 地址:

>>> macaddr = netifaces.ifaddresses('enp0s25')[netifaces.AF_LINK][0]['addr']

您当然可以通过解析ip 命令的输出来获得相同的信息,但使用netifaces 模块会更简洁。

【讨论】:

  • 可以肯定的是,netifaces 文档相当详细地阐述了这些复杂性和常见的错误假设。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
相关资源
最近更新 更多