我试图得到默认网关,使用目标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.0或default开头的行),
并打印网关主机(结果的第二个字段)。
正则expression式中\字符的扩散是显着的:
\(和\)指定一个组 \| 是交替字符(左边的东西或右边的东西匹配) \.表示\. – 意思是文字字符. 而不是正则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