如何显示默认连接互联网的接口的IP地址?

如何显示默认连接互联网的接口的IP地址?

我需要创建一个输出内部 IP 地址的脚本,该地址被配置为默认接口。

答案1

这里有很多很好的答案,但想加入我通常的方法:

最简单的解决方案是获取公共互联网地址的路由:

$ ip route get 1.1.1.1 | grep -oP 'src \K\S+'
192.168.0.20

另一种解决方案是获取默认网关,然后获取用于与该网关通信的 IP 地址:

$ ip route get $(ip route show 0.0.0.0/0 | grep -oP 'via \K\S+') | grep -oP 'src \K\S+'
192.168.0.20

答案2

这是另一种稍微简洁的方法procfs(假设您使用的是 Linux):

default_iface=$(awk '$2 == 00000000 { print $1 }' /proc/net/route)
ip addr show dev "$default_iface" | awk '$1 ~ /^inet/ { sub("/.*", "", $2); print $2 }'

这将返回接口的 IPv4 和(如果可用)IPv6 地址。如果您只需要其中之一(查找inetIPv4 和inet6IPv6),则可以更改测试。


$ default_iface=$(awk '$2 == 00000000 { print $1 }' /proc/net/route)
$ ip addr show dev "$default_iface" | awk '$1 ~ /^inet/ { sub("/.*", "", $2); print $2 }'
10.0.2.15
fe80::a00:27ff:fe45:b085
$ ip addr show dev "$default_iface" | awk '$1 == "inet" { sub("/.*", "", $2); print $2 }'
10.0.2.15
$ ip addr show dev "$default_iface" | awk '$1 == "inet6" { sub("/.*", "", $2); print $2 }'
fe80::a00:27ff:fe45:b085

答案3

我最喜欢的是下面的。

获取默认界面:

$ ip r | grep -oP 'default .* \K.+'
eth0

获取接口的ip:

$ ip a show eth0 | grep -oP 'inet \K[\d\.]+'
10.33.44.135

综合:

$ ip a show $(ip r | grep -oP 'default .* \K.+') | grep -oP 'inet \K[\d\.]+'
10.33.44.135

答案4

另一种方法是:

ip a|awk /$(ip r|awk '/default/ { print $5 }')/|awk '/inet/ { print $2 }'| cut -f1 -d"/"

这样做的好处是仅使用ip a并且ip r默认情况下在所有 Linux 系统上都可用

相关内容