2011-07-21 27 views
101

我需要在Mac機器上獲取默認網關。我知道在Linux路由中-n會給出一個輸出,我可以從中輕鬆檢索到這些信息。但是,這不適用於Mac OSX(Snow Leopard)。如何在Mac OSX中獲取默認網關

我也試過netstat -nr | grep 'default',但是我希望在Linux/Unix中有一個像route -n那樣的更清晰的輸出。 netstat -nr列出了它們的所有接口和默認網關。

任何類型的建議或提示正確的方向將不勝感激。

+2

遷移到超級用戶? – JMD

回答

162

你可以嘗試:

route -n get default 

這是不一樣的GNU/Linux的route -n(甚至ip route show),但對於檢查默認路由信息是有用的。 此外,您可以檢查包裹將要送往特定主機的路線。例如。

route -n get www.yahoo.com 

輸出將類似於:

route to: 98.137.149.56 
destination: default 
     mask: 128.0.0.0 
    gateway: 5.5.0.1 
    interface: tun0 
     flags: <UP,GATEWAY,DONE,STATIC,PRCLONING> 
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount  mtu  expire 
     0   0   0   0   0   0  1500   0 

恕我直言netstat -nr是你所需要的。即使MacOSX的網絡實用程序應用程序(*)也使用netstat的輸出來顯示路由信息。 Network utility screenshot displaying routing table information

我希望這有助於:)

(*)您可以啓動網絡實用程序open /Applications/Utilities/Network\ Utility.app

+0

謝謝。當時代華納的調制解調器決定要我的路由器曾經擁有的IP,並且ifconfig關於網關時,你剛剛在新房子裏爲我節省了幾個小時。 –

+0

不客氣@ChrisDoggett – Humber

2

我會用這些方針的東西...

netstat -rn | grep "default" | awk '{print $2}' 
+0

我們如何在Objective-C編程中實現這一點。有沒有這個框架 –

29

用於獲取可以使用netstat命令

netstat -rn 

這給出了一個很長的IP地址列表,並不容易找到所需的字段。樣本結果如下:

Routing tables 
Internet: 
Destination  Gateway   Flags  Refs  Use Netif Expire 
default   192.168.195.1  UGSc   17  0  en2 
127    127.0.0.1   UCS    0  0  lo0 
127.0.0.1   127.0.0.1   UH    1 254107  lo0 
169.254   link#7    UCS    0  0  en2 
192.168.195  link#7    UCS    3  0  en2 
192.168.195.1  0:27:22:67:35:ee UHLWIi   22  397  en2 1193 
192.168.195.5  127.0.0.1   UHS    0  0  lo0 

More result is truncated....... 

網關的ip地址在第一行;第一列有默認值。

要只顯示結果的選擇線,可以隨着netstat的

netstat -rn | grep 'default' 

使用的grep命令該命令過濾器和顯示具有默認結果的那些行。在這種情況下,你可以看到類似結果如下:

default   192.168.195.1  UGSc   14  0  en2 

如果你有興趣在尋找唯一通道,沒有其他的IP地址,您可以進一步篩選使用AWK結果。 awk命令匹配輸入結果中的模式並顯示輸出。當您直接在某些程序或批處理作業中使用結果時,這會很有用。

netstat -rn | grep 'default' | awk '{print $2}' 

awk命令告訴給匹配,並在文本打印結果的第二列。因此,最後的結果是這樣的:

192.168.195.1 

在這種情況下,netstat的顯示所有結果,grep的僅選擇與在它的「默認」的路線,和awk進一步顯示在文本中第二列中的模式匹配。

您可以同樣使用route -n獲取默認命令來獲得所需的結果。完整的命令是

route -n get default | grep 'gateway' | awk '{print $2}' 

這些命令在Linux以及unix系統和MAC OS中都能很好地工作。

4

不需要grep實用程序。 awk中能做到這一切:

netstat -rn | awk '/default/ {print $2}' 
     192.168.128.1 

請注意,如果您有類似的Parallels(或VPN,或兩者)運行時,您可能會看到兩個或更多的默認路由條目 - 如果你使用它會真「 grep'的建議也是如此。

netstat -rn | awk '/default/ {print $2}' 
     192.168.128.1 
     link#12 

netstat -rn | awk '/default/ {print $2}'        
     utun1 
     192.168.128.1 
     link#12 

要設置用於進一步使用的變量(_default)(假設只有一個 '默認' 的條目).....

_default=$(netstat -rn inet | awk '/default/ {print $2}') # I prefer $(...) over back-ticks 

在這種情況下多條默認路線使用:

netstat -rn | awk '/default/ {if (index($6, "en") > 0){print $2} }' 
     192.168.128.1 

這些實例es在Mavericks Terminal.app中測試,僅針對OSX。例如,其他* nix版本經常使用'eth'進行以太網/無線連接,而不是'en'。 這也只能用ksh進行測試。其他shell可能需要稍微不同的語法。