Какую команду можно запустить, чтобы получить только IP-адрес моего маршрутизатора?
С помощью этой команды у меня должен быть только IP-адрес моего маршрутизатора, а не, например, вся таблица маршрутизации (как при запуске route -n
).
Остроты:
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 в комментариях. Поскольку Вы видите, что нет ничего специального, сделанного здесь, и целое испытание здесь является просто упражнением в использовании выходных инструментов редактирования такой, как сокращено, awk, и grep.
Другой метод получения информации шлюза через nmcli dev list
(да, все еще полагаясь на администратора сети) команда. nmcli
команда - версия строки администратора сети. Вы могли работать nmcli dev list | grep -i routers
или Вы могли работать nmcli dev list | grep -i 'gw ='
. Снова, Вы могли тренироваться в в вырезании всех других информация кроме желаемого IP-адреса, если бы Вы хотели.
С тех пор в исходном вопросе единственная спецификация должна была распечатать шлюз по умолчанию только, я полагаюсь на вывод nm-инструмента здесь. NetworkManager идет с Ubuntu по умолчанию, это - стандартный путь к тому, чтобы управлять сетевыми подключениями Ubuntu. При использовании чего-то другого, как wicd или подключение через wpa_cli, nm-инструмент не предоставит Вам ответ. В таком случае можно найти рев ответов других людей более полезным.
Более нейтральная в отношении дистрибутива, и нейтральная в отношении конфигурации опция состояла бы в том, чтобы использовать 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}'
Поскольку Вы обычно используете 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
Можно ли найти его многими путями
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}'
Я использую этого довольно часто:
route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
Я использую это довольно часто и легкий помнить:
route | grep default | awk '{print $2}'
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
Если у Вас есть доступ к веб-браузеру в системе, можно перейти к http://whatsmyrouterip.com/, и это должно смочь найти IP без любой команды.
Иначе просто открывая терминал и делая a ip route | grep default
должен быть достаточно. Это могло бы дать больше чем один в зависимости от Ваших сетевых интерфейсов tho.