Как мне получить шлюз по умолчанию в LINUX, учитывая пункт назначения? - PullRequest
34 голосов
/ 30 июля 2009

Я пытаюсь получить шлюз по умолчанию, используя пункт назначения 0.0.0.0

Я использовал эту команду: netstat -rn | grep 0.0.0.0

И вернул этот список:

**Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface<br>
10.9.9.17       0.0.0.0         255.255.255.255 UH        0 0          0 tun0<br>
133.88.0.0      0.0.0.0         255.255.0.0     U         0 0          0 eth0<br>
0.0.0.0         133.88.31.70    0.0.0.0         UG        0 0          0 eth0**<br>

Моя цель здесь - пропинговать шлюз по умолчанию, используя пункт назначения 0.0.0.0; таким образом, это 133.88.31.70; но этот возвращает список из-за использования grep.

Как получить только шлюз по умолчанию? Он понадобится моему скрипту bash, чтобы определить, работает ли сетевое соединение или нет.

Ответы [ 14 ]

0 голосов
/ 27 сентября 2018

Следующая команда возвращает IP-адрес шлюза маршрута по умолчанию на хосте Linux, используя только bash и awk:

printf "%d.%d.%d.%d" $(awk '$2 == 00000000 && $7 == 00000000 { for (i = 8; i >= 2; i=i-2) { print "0x" substr($3, i-1, 2) } }' /proc/net/route)

Это должно даже работать, если у вас есть более одного шлюза по умолчанию, если их метрики различны (и они должны быть ..).

0 голосов
/ 01 февраля 2013

/ sbin / route | egrep "^ default" | cut -d '' -f2-12 # и 'cut' по вкусу ...

0 голосов
/ 08 февраля 2012

используйте команду ниже:

route -n | grep '^0\.0\.\0\.0[ \t]\+[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*[ \t]\+0\.0\.0\.0[ \t]\+[^ \t]*G[^ \t]*[ \t]' | awk '{print $2}'
0 голосов
/ 04 августа 2009

Если вы знаете, что 0.0.0.0 - это ваш ожидаемый результат и он будет в начале строки, вы можете использовать в своем скрипте следующее:

IP=`netstat -rn | grep -e '^0\.0\.0\.0' | cut -d' ' -f2`

затем ссылка на переменную ${IP}.

Было бы лучше использовать awk вместо cut здесь ... т.е.

IP=`netstat -rn | grep -e '^0\.0\.0\.0' | awk '{print $2}'`
...