Networking
如何顯示具有 Internet 連接的預設介面的 IP 地址?
我需要創建一個輸出內部 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 地址。如果您只需要一個或另一個(尋找
inet
IPv4 和inet6
IPv6),您可以更改測試。$ 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