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

时间:2017-04-05 10:47:39

标签: linux shell networkmanager

如何在具有NetworkManager的系统上检测当前连接是否已标记为已计量?

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

2 个答案:

答案 0 :(得分:2)

使用nmcli实用程序,必要的步骤是:

  1. 验证NetworkManager是version 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. values are: 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

  5. 并且,要获得按设备分组的列表:

      $ 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
    

    尝试将其减少到只有默认路由的信息仍然需要a call to another command,因为NetworkManager不会尝试区分处于连接状态的多个设备:

      $ nmcli -t -f GENERAL.DEVICE,GENERAL.METERED dev show `ip route list 0/0 | sed -r 's/.*dev (\S*).*/\1/g'`
    

答案 1 :(得分:1)

您还可以通过D-Bus获得当前连接的计量状态。在外壳程序中,您可以使用busctl

busctl get-property org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Metered

nmcli解决方案相比,这只是一个命令,在其他编程语言中,直接使用D-Bus而不是必须调用nmcli会更有效。