我可以运行什么命令来获取路由器的 IP 地址?
使用此命令,我应该只获得路由器的 IP,而不是例如整个路由表(如我运行时route -n
)。
答案1
单行代码:
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 获取信息),找到包含单词 的行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 将不会为您提供答案。在这种情况下,您可能会发现下面其他人的答案更有用。
一个更中立于发行版和配置的选项是使用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}'
答案2
您可以通过多种方式找到它
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}'
答案3
正如您通常使用的那样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
答案4
如果你可以访问系统上的网络浏览器,你可以访问http://whatsmyrouterip.com/并且它应该能够不用任何命令来找到您的 IP。
否则,只需打开终端并执行一个ip route | grep default
就足够了。不过,根据您的网络接口,它可能会给出多个。