Получение IP-адреса заданного интерфейса [дубликат]

0
09.03.2019, 20:14
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}'  

Наконец, еще один вариант, который ИМХО является «наиболее элегантным», — получение IPv4-адреса для любого интерфейса, используемого для подключения к указанному удаленному хосту (8.8.8.8 в данном случае ). Предоставлено @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 }'

Это может быть полезно на хосте с несколькими интерфейсами и спецификациями маршрута.

1
28.01.2020, 03:56

Теги

Похожие вопросы