Як показати (просто) IP-адресу мого маршрутизатора?


22

Яку команду можна запустити, щоб отримати лише IP-адресу мого маршрутизатора?

За допомогою цієї команди я мав би мати лише IP свого маршрутизатора, а не, наприклад, всю таблицю маршрутизації (як коли я запускаю route -n).

Відповіді:


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+'як запропонував у коментарях Авінаш Радж. Як ви бачите, тут нічого особливого не робиться, і ціле випробування тут є лише вправою використання інструментів редагування вихідних даних, таких як 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-інструмент не дасть вам відповіді. У такому випадку ви можете знайти відповіді інших людей нижче кориснішими.

Більше нейтральним для конфігурації та нейтральним конфігурацією було б використання 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+'
Avinash Raj

@AvinashRaj Дякую! Я не вивчав греп і бук в глибині, тому працював над знаннями, які я вже мав. Це буде добре знати
Сергій Колодяжний

Можливо, це пов’язано з якоюсь (додатковою) особливістю моєї конфігурації, але на машині з адаптерами 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. (The ip route ...і route -n ...способи виробництва просто 192.168.1.1, що я хотів би розглянути найбільш бажаний результат.)
Eliah Каган

Це не спрацює, якщо мережею не керується, 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

З коментарів - (дякую Авінаш Радж 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}'було б 5 дюймів.
Avinash Raj

так багато варіантів. У моїй системі він друкує два рази без 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

вам не потрібно користуватися 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?
Avinash Raj

1

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

В іншому випадку ip route | grep defaultдостатньо просто відкрити термінал і зробити це . Це може давати більше одного, залежно від ваших мережевих інтерфейсів.


0

Я використовую це досить часто і легко запам'ятовується:

route | grep default | awk '{print $2}'

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.