我正在尝试获取默认网关,使用目标 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 脚本需要它来识别网络连接是否正常。
答案1
DEFAULT_ROUTE=$(ip route show default | awk '/default/ {print $3}')
ping -c 1 $DEFAULT_ROUTE
这应该可以解决你的问题。
答案2
ip route show default 0.0.0.0/0
ip route | grep
在具有许多(10000+)条路线的系统上,此命令比默认命令快得多
例如,从我的路由器上看,它有完整的 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作为参数
答案3
ip route show default
应该可以解决默认网关的问题,或者您可以用ip route get <someip>
它来查看特定 IP 地址的路由。
答案4
我是这样做的:
#!/bin/sh
GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p")
echo ${GATEWAY_DEFAULT}