检测当前连接是否在没有 NetworkManager 的情况下进行计量

检测当前连接是否在没有 NetworkManager 的情况下进行计量

我与其他开发人员一起创建了一个脚本,只要 Linux 系统未连接到按流量计费的连接,就会自动更新它们。

但我们发现有些系统会使用“systemd-networkd”而不是network-manager来配置网络,并且同时使用这两个程序会相互冲突。

所以我们不能真正依赖于系统上安装的 nmcli 并使用此解决方案问题

答案1

没有单一可靠的方法可以自动检测到这一点。网络有一些方法可以暗示它是按流量计费的,但这些方法远没有得到普遍部署。

但是,当这些提示不存在时,您不能假设连接未按流量计费;可能是也可能不是。使用 NetworkManager,用户可以在配置连接时设置“计量连接”属性,因为用户可能最了解连接的状态。

因此,您可能只是让用户选择/负责运行您的脚本或禁用它。

答案2

正如 @telcoM 所说,没有确定的方法可以确定连接是否按流量计费。另一个选项是建立一个已知连接表以及是否对它们进行计量。一个相对较好的指标是外部 IP 地址,您可以使用以下命令确定该地址

dig +short myip.opendns.com @resolver1.opendns.com

答案3

我们发现的唯一解决方案仍然需要网络管理器:

nmcli --terse --fields GENERAL.METERED dev show 2>/dev/null | grep --quiet "yes"

相关内容