您可以使用python-networkmanager - 它封装了 d-bus(在 debian/ubuntu 上,默认 python 需要安装 python3-dbus)
import NetworkManager
for conn in NetworkManager.NetworkManager.ActiveConnections:
print('Name: %s; vpn?: %s' % (conn.Id, conn.Vpn))
请注意,几乎所有类都只是代理调用,因此有关属性的描述,请查看 d-bus api 文档 - 用于活动连接https://developer.gnome.org/NetworkManager/unstable/gdbus-org.freedesktop.NetworkManager.Connection.Active.html。
在纯 dbus 解决方案之下 - 稍作修改,NetworkManager 源 (git://anongit.freedesktop.org/NetworkManager/NetworkManager.git) 中的示例之一
import dbus, sys
bus = dbus.SystemBus()
m_proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
manager = dbus.Interface(m_proxy, "org.freedesktop.NetworkManager")
mgr_props = dbus.Interface(m_proxy, "org.freedesktop.DBus.Properties")
s_proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings")
settings = dbus.Interface(s_proxy, "org.freedesktop.NetworkManager.Settings")
active = mgr_props.Get("org.freedesktop.NetworkManager", "ActiveConnections")
for a in active:
a_proxy = bus.get_object("org.freedesktop.NetworkManager", a)
a_props = dbus.Interface(a_proxy, "org.freedesktop.DBus.Properties")
name = a_props.Get("org.freedesktop.NetworkManager.Connection.Active", "Id")
vpn = a_props.Get("org.freedesktop.NetworkManager.Connection.Active", "Vpn")
print('Name: %s; vpn?: %s' % (name, vpn))
# to get even more data
#connection_path = a_props.Get("org.freedesktop.NetworkManager.Connection.Active", "Connection")
#c_proxy = bus.get_object("org.freedesktop.NetworkManager", connection_path)
#connection = dbus.Interface(c_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
#settings = connection.GetSettings()
#print("%s (%s)" % (name, settings['connection']))