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

Sue*_*ezy 12 grep gateway

我正在尝试使用目标 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
Run Code Online (Sandbox Code Playgroud)

我的目标是使用目标 0.0.0.0 ping 默认网关;因此,即“133.88.31.70”;但是由于使用了'grep',这个返回了一个列表。

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

Dav*_*ley 23

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

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

  • 我在网上看到了很多关于这个命令的答案,但没有一个解释为什么使用“显示默认值”。事实上,没有任何参数的“ip route show”对我来说完全一样。所以我的问题是为什么命令中有“default”?这是什么意思? (3认同)

小智 6

 ip route show default 0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

此命令比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
Run Code Online (Sandbox Code Playgroud)
  • 因为ip route show default show我的所有路线不仅是默认路线
  • 因为ip route get不接受默认值0.0.0.0/0作为参数