kai*_*aio 29 command-line networking router ip
我可以运行什么命令来获取路由器的 IP 地址?
使用这个命令,我应该只有我的路由器的 IP,而不是,例如,整个路由表(当我运行时route -n)。
Ser*_*nyy 31
单线:
nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2nm-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:
Run Code Online (Sandbox Code Playgroud)
编辑和附加信息
从检查命令中可以看出,我们获取nm-tool(which,note, take information from 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 不会为您提供答案。在这种情况下,您可能会发现以下其他人的答案更有用。
一个更加发行版和配置中立的选项是 use 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
Run Code Online (Sandbox Code Playgroud)
这是剪切所需信息的方法: netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
另一个,也是中性的: arp -n | awk '{print $1}'
Pan*_*her 10
您可以通过多种方式找到它
ip route show default
Run Code Online (Sandbox Code Playgroud)
一个更好的问题,你想要什么或如何塑造输出?
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
Run Code Online (Sandbox Code Playgroud)
来自评论 -(谢谢 Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
Run Code Online (Sandbox Code Playgroud)
正如您通常使用的那样route -n,您可以尝试sed结合使用此解决方案route -n:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
Run Code Online (Sandbox Code Playgroud)
这是一个测试:
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用grep:
$ 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
Run Code Online (Sandbox Code Playgroud)
正如@AvinashRaj 指出的那样,这可以仅通过使用grep(无需使用来挤压空格tr)来完成:
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73808 次 |
| 最近记录: |