Answers:
单线:
nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
nm-tool | grep -i gateway | awk '{print $2}
netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
arp -n | awk '{print $1}'
注意:仅当您的计算机是网络上的唯一计算机时,该方法才有效ip route show | grep -i 'default via'| awk '{print $3 }'
输出:192.168.0.1
对我来说
注意:
对于15.04及更高版本,没有nm-tool
,请使用nmcli dev show <IFACE>
。例如,
$ nmcli dev show wlan7 | grep GATEWAY
IP4.GATEWAY: 192.168.0.1
IP6.GATEWAY:
编辑和其他信息
从检查命令中可以看到,我们获取输出nm-tool
(注意,它从NetworkManager获取信息),找到包含word的行gateway
,比带有echo的信息打印(用空格分隔),然后仅截取该内容的第二项输出。请注意,如果那里有两个或多个连接,则可能需要顶部卸下xargs echo | cut -d' ' -f2
部件,然后将其替换为awk '{print $2}'
;换句话说,整行看起来像这样nm-tool | grep -i gateway | awk '{print $2}'
。另外,您也可以使用nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj在评论中提出的建议。如您所见,这里没有做任何特别的事情,这里的整个测试仅是使用诸如cut,awk和grep之类的输出编辑工具的练习。
获取网关信息的另一种方法是通过nmcli dev list
(是,仍然依赖网络管理器)命令。nmcli
是网络管理器的命令行版本。您可以跑步nmcli dev list | grep -i routers
,也可以跑步nmcli dev list | grep -i 'gw ='
。同样,如果需要,您可以练习剪切除所需IP地址以外的所有其他信息。
因为在最初的问题中,唯一的规范是仅打印默认网关,所以我在这里依靠nm-tool的输出。默认情况下,NetworkManager随Ubuntu一起提供,这是管理Ubuntu网络连接的标准方法。如果您使用其他东西,例如wicd或通过wpa_cli连接,nm-tool将无法为您提供答案。在这种情况下,您可能会发现其他人的回答更有用。
更具发行版中性和config-neutral选项将使用netstat -n
,它使用内核路由表,类似于route -n
。它的输出是波纹管,不足为奇。
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
这是剪切所需信息的方法: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
另一个,也是中立的: arp -n | awk '{print $1}'
eth0
和wlan0
,两个主动连接但与仅配置在网关上wlan0
,nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
输出仅0.0.0.0
。nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
输出两行:0.0.0.0
后跟192.168.1.1
。(ip route ...
和route -n ...
方法产生公正192.168.1.1
,我认为这是最理想的结果。)
network-manager
例如,通过ifupdown
或ifconfig
..in这种情况下nm-tool
不会产生期望的output..in简而言之,这答案完全依赖通过被管理的网络上network-manager
..
您可以找到很多方法
ip route show default
一个更好的问题是,您想要什么或如何调整输出的形状?
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
从评论中-(谢谢Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
uniq
只是tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
5英寸。
通常使用时route -n
,可以sed
结合使用以下解决方案route -n
:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
这是一个测试:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
$ route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
192.168.1.1
另一种方法是使用grep
:
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
正如@AvinashRaj指出的那样,这只能通过使用来完成grep
(无需使用来压缩空格tr
):
route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
tr
,仅grep就可以完成工作route -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
我经常使用这个:
route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
192.168.0.1
什么?
如果您可以访问系统上的Web浏览器,则可以访问http://whatsmyrouterip.com/,它无需任何命令即可找到您的ip。
否则,只需打开终端并做一个ip route | grep default
就足够了。根据您的网络接口,它可能会提供多个。
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'