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

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

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

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

решение1

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

  • 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, печатаем эту информацию с помощью echo (разделенной пробелами), а затем отсекаем только второй элемент всего вывода. Обратите внимание, что если у вас есть два или более соединений, вам может потребоваться удалить верхнюю 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+'то, что предложил Авинаш Радж в комментариях. Как вы можете видеть, здесь ничего особенного не делается, и все испытание здесь представляет собой просто упражнение по использованию инструментов редактирования вывода, таких как 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}'

решение2

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

ip route show default

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

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

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

Из комментариев -(спасибо Авинашу Раджу 0

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

решение3

Как вы обычно используете 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

решение4

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

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

Связанный контент