2012-07-05 92 views
2

具體而言,我正在尋找一種方法來判斷系統是否具有配置爲全局範圍的範圍的IPv6地址的網絡接口。環回和鏈接作用域地址「不計數」。有沒有一種使用unix shell命令來判斷是否有配置的IPv6接口的便攜方式?

我想要達到的是匹配getaddrinfo()是否會返回任何IPv6地址與AI_ADDRCONFIG提示標誌。

我可以通過使用getaddrinfo()來編寫一些查找IPv6回送地址(「:: 1」)的代碼。但是這是一個相當複雜的構建過程的測試的一部分,並且爲了測試這個相當簡單的事情而不必構建可執行文件就簡單多了。

迄今爲止發現的最好的只適用於Linux,並使用最近發行版附帶的ip命令。

if ip -f inet6 -o addr | cut -f 9 -s -d' ' | grep global > /dev/null ; then 
    echo "IPv6 addresses configured continuing" 
else 
    echo "No global IPv6 addresses configured - skipping test" 
    exit 0 
fi 

然而,這依賴於輸出的從ip我懷疑是保證和在Unix(例如FreeBSD的)的其他版本中不存在當前格式。

我不認爲ifconfig在不同Unix版本中提供了類似的足夠輸出以供使用。

有沒有其他工具我失蹤?

+1

我不認爲你可以找到一個安裝在任何地方並具有一致輸出格式的工具。不過,也許你可以製作一個簡單的Perl或Python腳本。 – tripleee 2012-07-06 12:27:27

+0

您一定要編寫腳本,ifconfig在unix平臺上給出類似的結果,例如,所有ipv6地址都以inet6 開頭。有一點Perl應該在這裏完成這項工作,當然是任何以fe80或fec0開頭的ipv6地址,那麼我們只是忽略它,因爲它是一個鏈接本地/站點本地地址。 – display101 2012-07-06 15:28:20

回答

0

現在,相當不錯的方法,如果您有至少一些IPv6連通性檢查的

ping6 -c 10 ipv6.google.com 

結果但是它是一個雜牌。但從某種意義上說,它應該適用於大多數情況,甚至可能更多。

+1

不幸的是,這並沒有真正的幫助。儘管我正在尋找全球範圍的IPv6地址,但這並不意味着該機器實際上已連接到互聯網本身。它可能位於一個包含全球地址但不與外部世界連通的獨立測試網絡中。 – StitchedUp 2012-07-17 20:19:26

相關問題