Как показать (просто) IP-адрес моего роутера?

22

Какую команду можно запустить, чтобы получить только IP-адрес моего маршрутизатора?

С помощью этой команды у меня должен быть только IP-адрес моего маршрутизатора, а не, например, вся таблица маршрутизации (как при запуске route -n).

Kaio
источник

Ответы:

22

Однострочники:

  • nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
  • nm-tool | grep -i gateway | awk '{print $2}
  • netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
  • arp -n | awk '{print $1}' Примечание: работает, только если ваш компьютер является единственным в сети
  • ip route show | grep -i 'default via'| awk '{print $3 }'

вывод: 192.168.0.1для меня

ПРИМЕЧАНИЕ :

Для 15.04 и позже нет nm-tool, так что пользуйтесь nmcli dev show <IFACE>. Например,

$ nmcli dev show wlan7 | grep GATEWAY                                                                                    
IP4.GATEWAY:                            192.168.0.1
IP6.GATEWAY:                            

Изменения и дополнительная информация

Как вы можете видеть из изучения команды, мы берем вывод nm-tool(который, обратите внимание, берет информацию из NetworkManager), находим строку, содержащую слово gateway, печатаем информацию с эхом (разделенную пробелами), а затем обрезаем только второй элемент этого целого выход. Обратите внимание: если у вас есть два или более соединений, вам может потребоваться удалить верхнюю xargs echo | cut -d' ' -f2часть и заменить ее на awk '{print $2}'; другими словами, вся строка будет выглядеть следующим образом nm-tool | grep -i gateway | awk '{print $2}'. В качестве альтернативы вы могли бы использовать, nm-tool | grep -oP '(?i)gateway:\s*\K\S+'как предложено Avinash Raj в комментариях. Как вы можете видеть, здесь ничего особенного не сделано, и все испытание здесь - всего лишь упражнение в использовании инструментов редактирования вывода, таких как cut, awk и grep.

Другой способ получения информации о шлюзе - команда nmcli dev list(да, все еще полагаясь на администратора сети). nmcliверсия командной строки диспетчера сети Ты можешь бежать nmcli dev list | grep -i routersили ты можешь бежать nmcli dev list | grep -i 'gw ='. Опять же, вы можете попробовать вырезать всю другую информацию, кроме нужного IP-адреса, если хотите.

Поскольку в исходном вопросе единственной спецификацией была печать только шлюза по умолчанию, я полагаюсь на вывод nm-tool здесь. NetworkManager поставляется с Ubuntu по умолчанию, это стандартный способ управления сетевыми подключениями Ubuntu. Если вы используете что-то другое, например, wicd или подключаетесь через wpa_cli, nm-tool не даст вам ответа. В таком случае вы можете найти ответы других людей более полезными.

Более дистро-нейтральным и конфигурационно-нейтральным вариантом будет использование netstat -n, которое использует таблицу маршрутизации ядра, аналогично route -n. Это вывод ниже, ничего удивительного.

  Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0

И вот способ вырезать желаемую информацию: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'

Еще один, нейтральный: arp -n | awk '{print $1}'

Сергей Колодяжный
источник
простоnm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Авинаш Радж
@AvinashRaj Спасибо! Я не изучал grep и awk очень подробно, поэтому оперировал знаниями, которые у меня уже были. Об этом будет полезно знать
Сергей Колодяжный
Возможно, это связано с некоторой (дополнительной) особенностью моей конфигурации, но на машине с адаптерами eth0и wlan0, оба активно подключенными, но с настроенным только шлюзом wlan0, nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2выходы просто 0.0.0.0. nm-tool | grep -oP '(?i)gateway:\s*\K\S+'выводит две строки: с 0.0.0.0последующим 192.168.1.1. (То, как ip route ...и route -n ...что происходит 192.168.1.1, справедливо , что я считаю наиболее желательным результатом.)
Элия ​​Каган,
Это не сработает, если сеть не управляется, network-managerнапример, с помощью ifupdownили ifconfig.. в этих случаях nm-toolне будет получен желаемый результат .. Короче говоря, этот ответ зависит исключительно от сети, управляемой network-manager..
heemayl
@EliahKagan А, понятно. В случае моей команды он находит строки с «воротами», затем отображает их как одну строку, разделенную пробелами, и обрезает второй элемент в нем. Поскольку у вас есть две такие строки, моя команда печатает только одну из них. Команда Авинаша лучше в этом случае. Что касается 0.0.0.0, вот что-то связанное . Что касается комментария Heemayl, да, это правда, и в вопросе ОП не было никаких спецификаций, кроме как просто показать результат
Сергей Колодяжный
7

Вы можете найти это многими способами

ip route show default

Лучший вопрос, что или как вы хотите сформировать на выходе?

ip route show | awk '/default/ {print $3}'

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq

Из комментариев - (спасибо Avinash Raj 0

tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
пантера
источник
вам не нужно, потому uniqчто просто tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'5in.
Авинаш Радж
так много вариантов. В моей системе он печатает дважды без Uniq. Ваше решение работает также.
Пантера
Примечание tracepathподдерживается -mв некоторых версиях Ubuntu, но не в других .
Элия ​​Каган
Кстати, @ bodhi.zazen, в вашем ответе есть вариации, используйте traceroute. Та же идея, другая команда, верно?
Сергей Колодяжный
@serg, конечно, есть длинный список команд и параметров фильтрации, sed, awk, perl, grep ...
Panther,
6

Как вы обычно используете route -n, вы можете попробовать это sedрешение в сочетании с route -n:

route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p' 

Вот тест:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.0.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0

$ route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p' 
192.168.1.1

Другой способ будет использовать grep:

$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1

Как указал @AvinashRaj, это можно сделать только с помощью grep(не нужно сжимать пробелы с помощью tr):

route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
heemayl
источник
вам не нужно использовать tr, только grep сделает свою работуroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
Avinash Raj
1

Я использую это довольно часто:

route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
крит
источник
Что делать, если адрес есть 192.168.0.1?
Авинаш Радж
1

Если у вас есть доступ к веб-браузеру в системе, вы можете перейти по адресу http://whatsmyrouterip.com/, и он сможет найти ваш ip без какой-либо команды.

В противном случае достаточно просто открыть терминал и сделать это ip route | grep default. Это может дать более одного в зависимости от ваших сетевых интерфейсов.

MaZZly
источник
0

Я использую это довольно часто и легко запомнить:

route | grep default | awk '{print $2}'
sys0dm1n
источник
0
hostname  -I

190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1

таким образом, чтобы получить только вопрос IP

hostname -I | cut -d' ' -f1 

190.200.200.107

Скотт Стенсленд
источник