2013-03-08 31 views
0

我正在將持有網絡接口列表的單元轉換爲跨平臺。當前版本使用原始的winsock來獲取系統中每個網絡接口的地址,掩碼和廣播地址。Indy獲取所有本地接口信息(跨平臺)

我想讓這個跨平臺最簡單的方法就是使用Indy。我發現AddLocalAddressesToList是獲取所有接口的IP地址的一個很好的簡單方法,但我無法找到如何獲得我需要的其他信息(掩碼和廣播地址)。 我想我可以計算廣播地址,所以它真的只是我不知道的掩碼。

僅供參考。這是我發現獲取所有接口的IP地址的代碼。

TIdStack.IncUsage; 
try 
    GStack.AddLocalAddressesToList(Memo1.Lines); 
finally 
    TIdStack.DecUsage; 
end; 

回答

2

WinSock不支持報告那種信息。您必須改用特定於操作系統的API。在Windows上,這意味着使用Win32 API GetAdaptersInfo()GetAdaptersAddresses()函數。在其他平臺上,可以使用getifaddrs()功能。

Indy目前不支持您要求的內容。此外,請注意,目前,AddLocalAddressesToList()僅在大多數平臺(包括Windows)上支持IPv4地址。

目前正在研究支持本地IPv6地址以及像子網掩碼這樣的其他信息,但目前還沒有ETA的可用性。

+0

你是對的,他們不是winsock fucntions,但那些是我在當前單元中使用的那些。那麼我認爲在OSX下必須有類似的功能? – Martin 2013-03-08 04:10:20

+0

就像我說過的,你可以在支持它的平臺上使用'getifaddrs()'函數,它包括OSX。 – 2013-03-08 05:21:20