如何(仅)显示我的路由器的 IP 地址?

如何(仅)显示我的路由器的 IP 地址?

我可以运行什么命令来获取路由器的 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就足够了。不过,根据您的网络接口,它可能会给出多个。

相关内容