特定のインターフェイスのIPアドレスを取得する

特定のインターフェイスのIPアドレスを取得する

私が指定するデバイスのIP(v4)アドレスが必要です。この応答は後でスクリプトで使用されます。これが私が持っているものです:

$ IFACE=eth1
$ ifconfig $IFACE |grep "inet " | awk '{print $2}'
10.0.0.33

これを行うためのよりきれいな(より短い)方法はありますか?

編集する:データなら私にぴったりのもの。ここで解決策を見つけてください:https://unix.stackexchange.com/a/84263/126008

ベストアンサー1

ipきれいでも短くもありませんが、代わりに使うべきだと思いますifconfig。最新の状態で維持され、おそらくもっと重要なことは、一貫して解析可能な出力を生成することです。

IPv4 アドレスが必要な場合eth0:

$ ip -4 -o addr show eth0 | awk '{print $4}'
192.168.1.166/24  

CIDR表記法を使用してください。 CIDR表記が必要ない場合は削除できます。

$ ip -4 -o addr show eth0 | awk '{print $4}' | cut -d "/" -f 1 
192.168.1.166  

あなたの質問は、インターフェイスのアドレスを指定したいことを示します。上記の答えはこれを提供すると思いますが、現在のホストのIPv4アドレスが必要な場合は、おそらくhostnameより簡単で簡単です。

$ hostname --all-ip-addresses | awk '{print $1}'  

またはIPv6アドレスが必要な場合:

$ hostname --all-ip-addresses | awk '{print $2}'  

最後に、IMHOの「最もエレガントな」もう1つのオプションは、指定されたリモートホスト(この場合は8.8.8.8)に接続するために使用されるインターフェイスのIPv4アドレスを取得することです。寄稿者: @gatoatigradoこの回答:

$ ip route get 8.8.8.8 | awk '{ print $NF; exit }'
192.168.1.166

スクリプトとして:

$ RHOST=8.8.8.8  
$ ip route get $RHOST | awk '{ print $NF; exit }'

これは、複数のインターフェイスとルーティング仕様を持つホストに役立ちます。

おすすめ記事