Linux 检测是否使用NetworkManager测量当前连接
在使用NetworkManager的系统上,如何检测当前连接是否标记为已计量Linux 检测是否使用NetworkManager测量当前连接,linux,shell,networkmanager,Linux,Shell,Networkmanager,在使用NetworkManager的系统上,如何检测当前连接是否标记为已计量 这是一个shell脚本,但我可以通过Python轻松调用任何C函数。使用nmcli实用程序,必要的步骤包括: 验证NetworkManager是否为: $nmcli-v nmcli工具,版本1.9.0 检查接口上的GENERAL.METERED: $nmcli-t-f GENERAL.METERED dev show eth1 常规。计量:未知 强制值的操作如下所示: $nmcli dev modify wlan1
这是一个shell脚本,但我可以通过Python轻松调用任何C函数。使用nmcli实用程序,必要的步骤包括:
$nmcli-v
nmcli工具,版本1.9.0
$nmcli-t-f GENERAL.METERED dev show eth1
常规。计量:未知
$nmcli dev modify wlan1 connection.METERED是
连接已成功重新应用于设备“wlan1”
$nmcli-t-f常规。计量开发显示wlan1
常规。计量:是
$ nmcli -t -f GENERAL.DEVICE,GENERAL.METERED dev show
GENERAL.DEVICE:wlan1
GENERAL.METERED:yes
GENERAL.DEVICE:eth1
GENERAL.METERED:unknown
GENERAL.DEVICE:lo
GENERAL.METERED:unknown
由于NetworkManager不尝试区分处于连接状态的多个设备,因此尝试将此信息缩减为仅关于默认路由的信息仍然需要:
$ nmcli -t -f GENERAL.DEVICE,GENERAL.METERED dev show `ip route list 0/0 | sed -r 's/.*dev (\S*).*/\1/g'`
您还可以通过D-Bus获取当前连接的计量状态。在shell中,您可以使用
busctl
:
busctl get-property org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Metered
这只是一个命令,与
nmcli
解决方案相比,在其他编程语言中,直接使用D-Bus而不必调用nmcli
非常好!有没有办法只显示第一条默认路由所经过的网络的信息?对于许多VPN和其他虚拟网络,nmcli-t-f GENERAL.METERED dev show
(没有设备)的输出对我来说是所有可能值的混合。我添加了一种查看设备名称的方法,但我认为您可能需要询问ip路由
和理想情况下的ip监视器
,以可靠地跟踪默认路由或相关服务器的接口,然后执行/重做nmcli查询。谢谢!我将在几个小时内颁发奖金。另请参阅,其中描述了如何设置连接(即SSID)而不是接口。当您可能有多个wifi连接,其中一个连接到移动热点时,这是有意义的。您可以使用[”$(nmcli-t-f GENERAL.METERED dev show`ip路由列表0/0 | sed-r's/*dev(\s*)./\1/g'`cut-d':'-f2)==yes*]
测试输出结果是一个具有以下内容的枚举