Как найти IP-адрес шлюза в Linux


9

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

Мне нужно получить IP-адрес из приложения командной строки для использования в сценарии оболочки.


Вы ищете внешний IP-адрес маршрутизатора? В прошлом я использовал сценарий очистки экрана, чтобы получить такую ​​информацию на страницах настройки маршрутизатора. Большинство домашних маршрутизаторов имеют настройки на основе браузера, к которым легко получить доступ изнутри. Трудно дать общее решение, но вы можете использовать curl или wget для извлечения страницы, а затем использовать grep & awk для получения IP-адреса.
Том Баском

Я должен был быть более ясным в моем вопросе. По сути, я хочу найти IP-адрес шлюза, для которого установлено значение eth0, в блоке с одним интерфейсом Ethernet. По совпадению, это должен быть IP-адрес домашнего, базового, типа маршрутизатора Linksys или около того, NAT. Мне нужно, чтобы я мог пинговать его в сценарии оболочки.
Дж. Полфер

Кажется более сложным, чем мне нужно, но классная, гарантированная на работу идея.
Дж. Полфер

Ответы:


18

Чтобы распечатать только gw IP по умолчанию:

route -n | grep 'UG[ \t]' | awk '{print $2}'

Чтобы распечатать информацию о маршруте на всех интерфейсах:

route -n

или

netstat -rn

Разве UG не потребует, чтобы интерфейс был включен? Я думаю, что только G будет лучше.
Дж. Полфер

В любом случае, это место. Большое спасибо.
Дж. Полфер

Хотел, чтобы вы знали - я на самом деле использую этот ответ, но только с G в шаблоне grep; У меня не было iptools на машине, мне нужно запустить это.
Дж. Полфер

2
Вы можете спасти себя grep, awk также может отфильтровать:route -n | awk '{if($4=="UG")print $2}'
Кенни Рассчарт

Я бы предложил что-то вроде route -n|awk '$4~/G/{print $2; exit(0)}'первого шлюза, но ip route get IPлучше, потому что в нем указан маршрут, по которому действительно можно перейти к данному IP, который трудно найти в routeодиночку
Tino

9
ip route show 0.0.0.0/0 dev eth0 | cut -d\  -f3

это моя запись :)


Я бы улучшил это: ip route show 0.0.0.0/0 | awk '{print $ 3}'
Доминик Эйдсон

Я не знаю ... мои еще меньше нажатий клавиш :)
MikeyB

И cutв ~ 20 раз легче двоичного файла, чем awk.
K3 --- RNC

Если я опущу "dev eth0", это будет работать для eth0 или wlan0? (Я бы попробовал это, если бы у меня был достаточно длинный сетевой кабель)
Эрик Нельсон,

Это сработало для меня на openwrt os :)
Джой Ачарья


3
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.199.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr1
192.168.200.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr2
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 wlan0

0.0.0.0 - ваш шлюз по умолчанию, указывающий на 192.168.1.254 на моем месте.


2

Выходные данные от маршрута -n или netstat -rn и поиск пункта назначения 0.0.0.0.


2

Я предпочитаю пакет iproute :

# get the default route
ip route list | awk ' /^default/ {print $3}'
# get the default route but limit on eth0 (output may be empty)
ip route list dev eth0 | awk ' /^default/ {print $3}'

@sheepsimulator: К сожалению, это неверное предположение. Предложение Супермати лучше.
Доминик Эйдсон

@ Доминик Эйдсон - Почему? На машине есть только один физический интерфейс Ethernet.
Дж. Полфер

1
что такое плохое предположение?
Мартин М.

2

кто ниже этого? знак равно

ip r | awk '/^def/{print $3}'

1
Вызов принят: ip r | awk 'END{print $3}'на три символа короче.
Кенни Рассчарт

хорошо, но на моем локальном Debian / Squeeze box с мостами KVM мой gw по умолчанию находится в первой строке. странно, но это правда. Так что ваше классное решение не работает везде: - / (во всяком случае +1)
ThorstenS

ip не является универсальной командой UNIX - так что, опять же, она не будет работать везде.
Мей

вы правы, но в $ Subject стоит Linux, а не UNIX;) @David: вау, у вас действительно хороший блог!
ThorstenS

1
read x x i x< <(ip r g 1), результат находится в переменной $ i для дальнейшего использования
Tino

1

netstat -rn |awk '{if($1=="0.0.0.0") print $2}'

это будет чисто распечатать IP-адрес шлюза. (что бы сценарии linux были без awk ?)


Тогда вам нужно было бы использовать sed вместо этого ...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei

0

Если вы хотите получить шлюз из файла интерфейсов:

#!/bin/bash
gateway=$(grep -P '^\tgateway' /etc/network/interfaces)
gateway=$(echo ${gateway:9})    # Remove "  gateway "   
echo "gateway = $gateway"
if [ $gateway == "" ]; then
    echo "gateway is blank"
    exit -1
fi

0

Моя однострочная команда для получения IP-адреса шлюза по умолчанию:

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

-2

Открытый терминал в вашей ОС Linux. Обычно он находится в верхней или нижней панели, в зависимости от используемого дистрибутива Linux. После того, как вы открыли окно «Терминал», введите следующие команды: «ip route | grep default ”Теперь подождите секунду для вывода и запишите ваш адрес шлюза по умолчанию на экране. Ваш адрес шлюза должен выглядеть примерно как 192.168.1.1. Как только вы это узнаете, вы можете приступить к настройке маршрутизатора через его панель администратора.

Если это не помогло исправить вашу сеть, вам может понадобиться новый маршрутизатор.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.