如何获得LINUX给定目的地的默认网关?

我试图得到默认网关,使用目标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来ping默认网关; 因此,即“133.88.31.70”; 但是这个因为使用'grep'而返回一个列表。

问题是:我如何获得默认网关? 我将需要它为我的bash脚本来识别networking连接是否启动。

     DEFAULT_ROUTE=$(ip route show default | awk '/default/ {print $3}') ping -c 1 $DEFAULT_ROUTE 

    这应该可以解决你的问题。

    ip route show default应该做的默认网关的技巧,或者你可以使用ip route get <someip>来看看一个特定的IP地址的路由是什么。

      ip route show default 0.0.0.0/0 

    这个命令比ip route | grep要快得多 在许多(10000+)路由的系统上ip route | grep默认

    从完整的BGP和手动默认路由作为备份从我的路由器中寻找例子

     router:~# time ip route show default 0.0.0.0/0 default via XXX.XXX.192.254 dev eth0.123 real 0m0.707s router:~# time ip route | grep default default via XXX.XXX.192.254 dev eth0.123 real 0m8.596s 
    • 因为ip route show default show所有路由对我来说不仅是默认路由
    • 因为ip route get不接受默认0.0.0.0/0作为参数

    如果你想使用netstat来完成这个工作(所以它可以在不是Linux的东西上工作),一般的解决scheme是:

    netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'

    这显示了路由表,使用IP而不是parsing主机名( netstat -rn
    查找默认网关(以0.0.0.0default开头的行),
    并打印网关主机(结果的第二个字段)。

    正则expression式中\字符的扩散是显着的:

    • \(\)指定一个组
    • \| 是交替字符(左边的东西或右边的东西匹配)
    • IP地址中的点由\.表示\. – 意思是文字字符. 而不是正则expression式. (匹配任何单个字符)

    这是我如何做到的:

     #!/bin/sh GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p") echo ${GATEWAY_DEFAULT} 
      ip route show default | grep default | awk {'print $3'} 

    在这里呢

    非常简单的方法…问路由表如何到达它的networking之外的一个IP

    Google DNS == 8.8.8.8

    ip route获得8.8.8.8