如何在 Bash 中获取 IP 地址和连接的接口名称

如何在 Bash 中获取 IP 地址和连接的接口名称

搭载 Linux 的 PC 有多个网络接口,例如两个以太网卡和一个 wifi 适配器(数量和类型可能有所不同)。每个接口都可以连接到网络(也可以离线),网络可以连接到互联网(超级用户网站点可访问),并且可以连接到仅限本地的网络。

我想编写一个 bash 脚本来获取可用于访问互联网的 (本地) IP 地址和适配器名称。如果连接了多个 - 它应该是“要求”加载的浏览器将使用的那个超级用户网网页。如果没有连接的脚本应该echo "internet unavailble"

如何为此类脚本编写检查条件?我如何才能迭代/dev/*系统中所有具有网络功能的设备?

答案1

也许你不需要迭代。在我的 Debian 9(仅限 IPv4,我不确定它有多相关)中,我可以使用这个:

ip route get "$(host superuser.com | awk 'NR==1 {print $NF}')" \
| grep -o "dev .* src [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"

其中host(来自bind9-host包) 是要转换superuser.com为其 IP 地址。要处理错误等,您需要解构管道并围绕其部分构建具有一些逻辑的脚本。

示例输出:

dev wlan0  src 192.168.1.2

无论如何,为了进行迭代,请查看/sys/class/net

cd /sys/class/net
ls
for interface in *; do
    printf "Doing something with %s\n" "$interface"
done

但是这些设备并不在/dev,至少在我的系统中不存在。

相关内容