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

jgwigjjp  于 2023-04-29  发布在  Linux
关注(0)|答案(3)|浏览(196)

bounty还有7天到期。回答此问题可获得+50声望奖励。Flimm想要奖励现有答案

如何检测当前连接是否在具有NetworkManager的系统上标记为计量连接?
这是一个shell脚本,但我可以通过Python轻松调用任何C函数。

zwghvu4y

zwghvu4y1#

使用nmcli实用程序,必要的步骤包括:
1.验证NetworkManager是否为version 1.0.6+
$ nmcli -v nmcli tool, version 1.9.0
1.选中GENERAL。接口上的METERED:
$ nmcli -t -f GENERAL.METERED dev show eth1 GENERAL.METERED:unknown
1.值为:unknown, yes, no, yes (guessed), no (guessed)
1.强制执行该值是这样完成的:
$ 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'`
aiqt4smr

aiqt4smr2#

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

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

nmcli解决方案相比,这仅仅是一个命令,在其他编程语言中,直接使用D-Bus而不是调用nmcli会更有效。
结果是具有以下值的枚举(文档):
| 姓名|价值|说明|
| --------------|--------------|--------------|
| NM_METERED_UNKNOWN|0|计量状态未知|
| NM_METERED_YES|1|计量,则该值已显式配置|
| NM_METERED_NO|二|未计量,该值已显式配置|
| NM_METERED_GUESS_YES|三|计量,价值被猜到了|
| NM_METERED_GUESS_NO|四|未计量,值为猜测值|

cyej8jka

cyej8jka3#

出于某种原因,lossleader的解决方案总是在我的系统上返回no,而使用连接中的metered参数工作正常:
nmcli -f connection.metered connection shownmcli -t -f GENERAL.CONNECTION --mode tabular device show $DEVICE | head -n1``

相关问题