检测当前连接是否使用NetworkManager进行计量

如何检测当前连接是否标记为使用NetworkManager在系统上进行计量?

这是来自shell脚本,但我可以通过Python轻松调用任何C函数。

使用nmcli工具,必要的步骤是:

  1. 验证NetworkManager是版本1.0.6+ :

    $ nmcli -v nmcli tool, version 1.9.0

  2. 在接口上检查GENERAL.METERED:

    $ nmcli -t -f GENERAL.METERED dev show eth1 GENERAL.METERED:unknown

  3. 值是: unknown, yes, no, yes (guessed), no (guessed)

  4. 强制值是这样做的:

    $ nmcli dev modify wlan1 connection.METERED yes Connection successfully reapplied to device 'wlan1' $ nmcli -t -f GENERAL.METERED dev show wlan1 GENERAL.METERED:yes

而且,要获得按设备分组的列表:

  $ 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'`