Відповіді:
Одноколісні:
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}'
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
, що я хотів би розглянути найбільш бажаний результат.)
network-manager
наприклад, ifupdown
або ifconfig
.. в цих випадках nm-tool
не буде генеровано бажаний вихід. У двох словах, ця відповідь покладається виключно на мережу, якою керує network-manager
..
Ви можете знайти це багатьма способами
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 дюймів.
Зазвичай 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)"
Цим я користуюсь досить часто:
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
?
Якщо у вас є доступ до веб-браузера в системі, ви можете перейти на сторінку http://whatsmyrouterip.com/, і він повинен мати можливість знайти ваш ip без жодної команди.
В іншому випадку ip route | grep default
достатньо просто відкрити термінал і зробити це . Це може давати більше одного, залежно від ваших мережевих інтерфейсів.
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
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'