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


22

我可以运行什么命令来获取路由器的IP地址?

使用此命令,我应该只拥有路由器的IP,而没有整个路由表(例如,当我运行时route -n)。

Answers:


22

单线:

  • 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}'


简单nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
Avinash Raj 2015年

@AvinashRaj谢谢!我还没有对grep和awk进行过深入的研究,因此只能根据已经掌握的知识进行操作。这将是一个很好的认识
Sergiy Kolodyazhnyy 2015年

也许这是由于我的配置的一些(附加的)特殊性,但与适配器的机器上eth0wlan0,两个主动连接但与仅配置在网关上wlan0nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2输出仅0.0.0.0nm-tool | grep -oP '(?i)gateway:\s*\K\S+'输出两行:0.0.0.0后跟192.168.1.1。(ip route ...route -n ...方法产生公正192.168.1.1,我认为这是最理想的结果。)
Eliah Kagan 2015年

这如果网络没有被管理将无法正常工作network-manager例如,通过ifupdownifconfig..in这种情况下nm-tool不会产生期望的output..in简而言之,这答案完全依赖通过被管理的网络上network-manager..
heemayl

@EliahKagan啊,我明白了。就我的命令而言,它查找其中带有“ gateway”的行,然后将其作为由空格分隔的一行回显,并切掉其中的第二项。因为那里有两条这样的行,所以我的命令只显示其中一条。在这种情况下,Avinash的命令更好。至于0.0.0.0,这是相关的。至于heemayl的评论,是的,这是真的,并且OP的问题中除了说明输出之外没有其他说明
Sergiy Kolodyazhnyy 2015年

7

您可以找到很多方法

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}'

您不需要o uniq只是tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'5英寸。
Avinash Raj 2015年

这么多的选择。在我的系统上,它不重复打印两次。Y我们的解决方案也可以。
Panther 2015年

注意在某些版本的Ubuntutracepath支持-m,但在其他版本上支持。
伊利亚·卡根

顺便说一句,@ bodhi.zazen,您的答案有所不同,请使用traceroute。同样的想法不同的命令,对不对?
Sergiy Kolodyazhnyy 2015年

@serg当然,可能有一长串命令和过滤选项,如sed,awk,perl,grep ...
Panther 2015年

6

通常使用时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)"
Avinash Raj 2015年

1

我经常使用这个:

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什么?
Avinash Raj 2015年

1

如果您可以访问系统上的Web浏览器,则可以访问http://whatsmyrouterip.com/,它无需任何命令即可找到您的ip。

否则,只需打开终端并做一个ip route | grep default就足够了。根据您的网络接口,它可能会提供多个。


0

我经常使用它,并且容易记住:

route | grep default | awk '{print $2}'

0
hostname  -I

190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1

所以只得到IP问题

hostname -I | cut -d' ' -f1 

190.200.200.107

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.