我试图让默认网关使用目的地0.0.0.0
我用这个命令: netstat -rn | grep 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>
在这里,我的目标是使用ping通目的地的默认网关0.0.0.0
; 因此,即133.88.31.70
; 但这个方法返回,因为使用的列表grep
。
如何我只得到了默认网关? 我需要为我的bash脚本,以确定是否网连接,或根本没有。
Answer 1:
您可以使用获得的默认网关ip
命令是这样的:
IP=$(/sbin/ip route | awk '/default/ { print $3 }')
echo $IP
Answer 2:
在ip route
的命令iproute2的包可以无需使用路由选择awk
/ grep
,等做选择。
要选择默认路由(从可能许多)
$ ip -4 route list 0/0 # use -6 instead of -4 for ipv6 selection.
default via 172.28.206.254 dev wlan0 proto static
要选择下一跳特定接口
$ ip -4 route list type unicast dev eth0 exact 0/0 # Exact specificity
default via 172.29.19.1 dev eth0
在多个默认网关的情况下,您可以选择其中一个被选为下一跳,以特定的目标地址。
$ 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
然后,可以使用提取的值sed
/ awk
/ grep
等。以下是使用一个例子中bash
的read
内置。
$ read _ _ gateway _ < <(ip route list match 0/0); echo "$gateway"
172.28.206.254
Answer 3:
适用于任何Linux:
route -n|grep "UG"|grep -v "UGH"|cut -f 10 -d " "
Answer 4:
这个简单的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
基本上,我们运行netstat,将其保存到$纳秒。 然后发现,与0.0.0.0开始断了线。 然后在正则表达式中括号里面保存它的一切到$ 1中。 在此之后,只需把它打印出来。
如果它被称为null-gw.pl,只是像命令运行它:
perl null-gw.pl
或者如果你需要一个bash表达式中:
echo $(perl null-gw.pl)
祝好运。
Answer 5:
这就是我要做的事:
#!/bin/sh
GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p")
echo ${GATEWAY_DEFAULT}
Answer 6:
另一个perl的事情:
$return = (split(" ", `ip route | grep default`))[2];<br>
注意:之前使用这些反引号ip
和后default
Answer 7:
netstat的-rn | 握0.0.0.0 | AWK '{打印$ 2}' | grep的-v “0.0.0.0”
Answer 8:
#!/bin/bash
##################################################################3
# Alex Lucard
# June 13 2013
#
# Get the gateway IP address from the router and store it in the variable $gatewayIP
# Get the Router mac address and store it in the variable gatewayRouter
# Store your routers mac address in the variable homeRouterMacAddress
#
# If you need the gateway IP uncomment the next line to get the gateway address and store it in the variable gateWayIP
# gatewayIP=`sudo route -n | awk '/^0.0.0.0/ {print $2}'`
homeRouterMacAddress="20:aa:4b:8d:cb:7e" # Store my home routers mac address in homeRouterMac.
gatewayRouter=`/usr/sbin/arp -a`
# This if statement will search your gateway router for the mac address you have in the variable homeRouterMacAddress
if `echo ${gatewayRouter} | grep "${homeRouterMacAddress}" 1>/dev/null 2>&1`
then
echo "You are home"
else
echo "You are away"
fi
Answer 9:
有很多答案在这里了。 其中有些是非常具体的发行。 对于那些谁发现这个职位寻找一种方式来找到网关,但并不需要使用它的代码/批利用率(像我一样)......试试:
traceroute www.google.com
第一跳是你的默认网关。
Answer 10:
对于所有的默认网关列表,使用mezgani的答案 ,复制(略简体)在这里:
/sbin/ip route | awk '/^default/ { print $3 }'
如果您有同时配置多个网络接口,这将打印多个网关。 如果你想按名称选择一个已知的网络接口(例如eth1
),只是除了搜索, 要为过滤^default
行:
/sbin/ip route |grep '^default' | awk '/eth1/ {print $3}'
你可以做一个脚本,需要一个网络接口名作为参数,并打印相关的网关:
#!/bin/bash
if [[ $# -ne 1 ]]; then
echo "ERROR: must specify network interface name!" >&2
exit 1
fi
# The third argument of the 'default' line associated with the specified
# network interface is the Gateway.
# By default, awk does not set the exit-code to a nonzero status if a
# specified search string is not found, so we must do so manually.
/sbin/ip route | grep '^default' | awk "/$1/ {print \$3; found=1} END{exit !found}"
如在评论所指出的,这具有设定一个明智退出代码,其可以在更广阔的方案背景是有用的优点。
Answer 11:
如果你知道0.0.0.0
是你期望的输出,并且将在该行的开头,你可以用你的脚本如下:
IP=`netstat -rn | grep -e '^0\.0\.0\.0' | cut -d' ' -f2`
然后引用变量${IP}
。
这将是更好地在这里用awk,而不是切...即:
IP=`netstat -rn | grep -e '^0\.0\.0\.0' | awk '{print $2}'`
Answer 12:
使用下面的命令:
route -n | grep '^0\.0\.\0\.0[ \t]\+[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*[ \t]\+0\.0\.0\.0[ \t]\+[^ \t]*G[^ \t]*[ \t]' | awk '{print $2}'
Answer 13:
/ sbin目录/路线| egrep的 “^默认” |切-d”'-f2-12#,然后 '一刀切' 的味道...
Answer 14:
下面的命令只使用bash和AWK返回Linux主机上的默认路由网关IP:
printf "%d.%d.%d.%d" $(awk '$2 == 00000000 && $7 == 00000000 { for (i = 8; i >= 2; i=i-2) { print "0x" substr($3, i-1, 2) } }' /proc/net/route)
如果你有一个以上的默认网关,只要他们的指标是不同的这应该连工作(他们应该是...)。
文章来源: How do i get the default gateway in LINUX given the destination?