Я пытаюсь получить шлюз по умолчанию, используя пункт назначения 0.0.0.0
я использовал эту команду: netstat -rn | grep 0.0.0.0
и он возвращает этот список:
Destination - Gateway - Genmask - Flags - MSS - Window - irtt - Iface
10.9.9.17 - 0.0.0.0 - 255.255.255.255 - UH - 0 0 0 - tun0
133.88.0.0 - 0.0.0.0 - 255.255.0.0 - U - 0 0 0 - eth0
0.0.0.0 - 133.88.31.70 - 0.0.0.0 - UG - 0 0 0 - eth0
Моя цель здесь - пропинговать шлюз по умолчанию, используя пункт назначения 0.0.0.0; таким образом, это "133.88.31.70"; но этот возвращает список из-за использования 'grep'.
Вопрос: Как мне получить только шлюз по умолчанию? Он понадобится моему bash-скрипту, чтобы определить, работает ли сетевое соединение или нет.
ip
. На самом делеip route show
это псевдоним для,ip route list
и вы можете проверить,man ip
что эта подкоманда имеет синтаксисip route { list | flush } SELECTOR
... И ни один из перечисленных допустимых селекторов не указанdefault
. Я чувствую, чтоip route show table default
должен делать то, что мы хотим, но, к сожалению, это не так. Кому-нибудь, тоже сопоставьте начало строки (вас предупреждали):ip route show | awk '/^default/{print $3}'
Эта команда намного быстрее, чем
ip route | grep
стандартная в системе с большим количеством (более 10000) маршрутов.Посмотрите, например, с моего роутера с полным BGP и ручным маршрутом по умолчанию в качестве резервного
ip route show default show
все маршруты для меня не только маршрут по умолчаниюip route get
не принимает значение по умолчанию или 0.0.0.0/0 в качестве параметраисточник
ip route show default
следует сделать трюк для шлюза по умолчанию, или вы можете использовать,ip route get <someip>
чтобы увидеть, каков маршрут для определенного IP-адреса.источник
Если вы хотите сделать это с помощью
netstat
(чтобы оно работало на чем-то, что НЕ является Linux ), общее решение:netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'
Здесь показаны таблицы маршрутизации с использованием IP-адресов, а не разрешения имен хостов (
netstat -rn
),поиск шлюза по умолчанию (строки начинаются с
0.0.0.0
илиdefault
)и печать хоста шлюза (второе поле результатов).
Распространение
\
символов в регулярном выражении являются значительными:\(
и\)
укажите группу\|
является символом чередования (вещь слева или вещь справа совпадают)\.
- буквальный символ,.
а не как регулярное выражение.
(соответствует любому отдельному символу)источник
grep -e
илиegrep
также сделал бы трюк, не нуждаясь в скобках и трубе, чтобы избежатьegrep '^(default|0\.0\.0\.0)'
Вот как я это делаю:
источник
Это здесь
источник
grep default
когда вы уже указалиdefault
маршрут в своейip
команде?ОЧЕНЬ простой способ ... спросить таблицу маршрутизации, как она попадает на IP вне своей сети
Google DNS == 8.8.8.8
ip route get 8.8.8.8
источник
или
или
или
или
Если я правильно понимаю, поиск шлюза по умолчанию для этого точного маршрута - маршрут со всеми нулями - это либо 0.0.0.0/0.0.0.0 (или 0/0) для IPv4, либо 0000: 0000: 0000: 0000: 0000: 0000 : 0000: 0000 (или: :) для IPv6.
Однако (!), Без указания AF, который вы хотите использовать (-4 или -6 или -f inet или -f inet6), или без указания маршрута со всеми нулями в качестве префикса IPv4 или IPv6 (0/0 подразумевает IPv4) , он не может понять, что такое «по умолчанию» ...
Лично я не чувствую, что страница справочника очень ясно говорит об этом, но это только мои два цента.
источник