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

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

使用此命令,我应该只有我的路由器的IP,而不是,例如,整个路由表(就像我运行route -n )。

单行:

  • 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}' 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 。 例如,

 $ 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 xargs echo | cut -d' ' -f2 part,并将其替换为awk '{print $2}' ; 换句话说,整条线看起来像这个nm-tool | grep -i gateway | awk '{print $2}' nm-tool | grep -i gateway | awk '{print $2}' nm-tool | grep -i gateway | awk '{print $2}' 。 或者你可以使用nm-tool | grep -oP '(?i)gateway:\s*\K\S+' 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 routers或者你可以运行nmcli dev list | grep -i 'gw =' 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}' netstat -nr | awk '$1 == "0.0.0.0"{print$2}'

另一个,中立也是: arp -n | awk '{print $1}' arp -n | awk '{print $1}'

你可以找到很多方法

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

正如你通常使用route -n ,你可以尝试这个与route -n一起使用的sed解决方案:

 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 

我经常使用这个:

 route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}' 

如果您可以访问系统上的Web浏览器,则可以访问http://whatsmyrouterip.com/ ,它应该能够在没有任何命令的情况下找到您的IP。

否则只需打开终端并执行ip route | grep default ip route | grep default应该就够了。 它可能会提供多个,具体取决于您的网络接口。

我经常使用这个并且容易记住:

 route | grep default | awk '{print $2}' 
 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