【问题标题】:Detect if current connection is metered with NetworkManager检测当前连接是否使用 NetworkManager 计量
【发布时间】:2017-08-30 22:29:30
【问题描述】:

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

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

【问题讨论】:

    标签: linux shell networkmanager


    【解决方案1】:

    您还可以通过 D-Bus 获取当前连接的计量状态。在 shell 中,您可以使用 busctl:

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

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

    【讨论】:

    • 结果是一个带有以下values的枚举
    【解决方案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

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

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

    【讨论】:

    • 太棒了!有没有办法只显示第一个默认路由经过的网络信息?对于许多 VPN 和其他虚拟网络,nmcli -t -f GENERAL.METERED dev show(没有设备)的输出对我来说是所有可能值的混合。
    • 我添加了一种查看设备名称的方法,但我认为您可能需要询问ip route 最好是ip monitor 以可靠地跟踪默认路由或相关服务器的接口,然后执行/redo nmcli 查询。
    • 谢谢!我会在几个小时内奖励赏金。
    • 另见unix.stackexchange.com/questions/364927/…,它描述了如何设置连接(即SSID)而不是接口。当您可能拥有多个 wifi 连接时,这是有道理的,其中一个连接到移动热点。
    • 你可以用[[ "$(nmcli -t -f GENERAL.METERED dev show `ip route list 0/0 | sed -r 's/.*dev (\S*).*/\1/g'` | cut -d':' -f2)" == yes* ]]测试输出
    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2012-04-13
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多