如何(僅)顯示我的路由器的 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 獲取資訊),找到包含 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 將不會為您提供答案。在這種情況下,您可能會發現下面其他人的答案更有用。

一個更發行版中立和配置中立的選項是使用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。

否則,只需打開終端並執行 aip route | grep default就足夠了。不過,根據您的網路接口,它可能會提供多個。

相關內容