我正在尝试使用目标获取默认网关 0.0.0.0
我使用了这个命令: netstat -rn | grep 0.0.0.0
它返回了这个清单:
**Destination Gateway Genmask Flags MSS Window irtt Iface<br>
10.9.9.17 0.0.0.0 255.255.255.255 UH 0 0 0 tun0<br>
133.88.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0<br>
0.0.0.0 133.88.31.70 0.0.0.0 UG 0 0 0 eth0**<br>
Run Code Online (Sandbox Code Playgroud)
我的目标是使用目标ping默认网关0.0.0.0; 因此,那是133.88.31.70; 但是这个因为使用而返回一个列表grep.
我如何只获得默认网关?我将需要它用于我的bash脚本来识别网络连接是否正常.
Ali*_*ani 54
您可以使用以下ip命令获取默认网关:
IP=$(/sbin/ip route | awk '/default/ { print $3 }')
echo $IP
Run Code Online (Sandbox Code Playgroud)
sha*_*omb 37
iproute2包中的ip route命令可以选择路由而无需使用/ 等进行选择.awkgrep
选择默认路由(可能很多)
$ ip -4 route list 0/0 # use -6 instead of -4 for ipv6 selection.
default via 172.28.206.254 dev wlan0 proto static
Run Code Online (Sandbox Code Playgroud)
选择特定接口的下一跳
$ ip -4 route list type unicast dev eth0 exact 0/0 # Exact specificity
default via 172.29.19.1 dev eth0
Run Code Online (Sandbox Code Playgroud)
在多个默认网关的情况下,您可以选择将哪一个选择为特定目标地址的下一跳.
$ ip route get $(dig +short google.com | tail -1)
173.194.34.134 via 172.28.206.254 dev wlan0 src 172.28.206.66
cache
Run Code Online (Sandbox Code Playgroud)
然后,可以使用提取的值sed/ awk/ grep等以下是使用一个例子中bash的read内建.
$ read _ _ gateway _ < <(ip route list match 0/0); echo "$gateway"
172.28.206.254
Run Code Online (Sandbox Code Playgroud)
小智 6
适用于任何Linux:
route -n|grep "UG"|grep -v "UGH"|cut -f 10 -d " "
Run Code Online (Sandbox Code Playgroud)
这个简单的 Perl 脚本将为您完成。
#!/usr/bin/perl
$ns = `netstat -nr`;
$ns =~ m/0.0.0.0\s+([0-9]+.[0-9]+.[0-9]+.[0-9]+)/g;
print $1
Run Code Online (Sandbox Code Playgroud)
基本上,我们运行 netstat,将其保存到 $ns。然后找到以 0.0.0.0 开头的行。然后正则表达式中的括号将其中的所有内容保存到 $1 中。之后,只需打印出来即可。
如果它被称为 null-gw.pl,只需在命令上运行它,例如:
perl null-gw.pl
Run Code Online (Sandbox Code Playgroud)
或者如果您需要在 bash 表达式中使用它:
echo $(perl null-gw.pl)
Run Code Online (Sandbox Code Playgroud)
祝你好运。
| 归档时间: |
|
| 查看次数: |
63133 次 |
| 最近记录: |