Networking

如何顯示具有 Internet 連接的預設介面的 IP 地址?

  • September 14, 2021

我需要創建一個輸出內部 IP 地址的腳本,該地址被配置為預設介面。

這是另一種稍微簡潔的方法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

這裡有很多好的答案,但想採用我通常的方法:

最簡單的解決方案是獲取公共 Internet 地址的路由:

$ 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

引用自:https://unix.stackexchange.com/questions/166999