给定目的地,如何获取 LINUX 中的默认网关?

给定目的地,如何获取 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 脚本需要它来识别网络连接是否正常。

答案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}

相关内容