在Python中处理多个网络接口

3 投票
3 回答
2544 浏览
提问于 2025-04-15 12:43

我想在Python中做以下几件事:

  1. 列出当前机器上的所有IP接口。
  2. 接收网络接口变化的更新(比如接口上线、下线或者IP地址变化)。

在Ubuntu Hardy上,任何可用的Python包都可以。

3 个回答

0

不,不用担心 os.system() 或 dbus API。

你真正需要的是使用 netlink API 来实现这个功能。可以使用 libnl 接口(netlink.route.link),或者自己处理 netlink 消息。可以看看 这个例子

0

我一直在使用以下代码,

temp =  str(os.system("ifconfig -a | awk '$2~/^Link/{_1=$1;getline;if($2~/^addr/){print _1" "}}'"))

它会列出所有“正常运行”的网络接口

比如说,eth0、eth2、wlan0

3

我觉得最好的办法是通过 dbus-python 来实现这个。

这个 教程 有稍微提到一些网络接口的内容:

import dbus
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.NetworkManager',
                       '/org/freedesktop/NetworkManager/Devices/eth0')
# proxy is a dbus.proxies.ProxyObject

撰写回答