インターネットに接続されているプラ​​イマリインターフェイスの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 アドレスが返されます。テストの1つだけが必要な場合(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"/"

これの利点は、すべてのLinuxシステムでのみデフォルトで利用可能であることip aです。ip r

関連情報