如何显示(只)我的路由器的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