2012-07-03 53 views
2

我期待獲得.net中的活動IP地址,在這種情況下是與以太網適配器關聯的地址。.NET獲得活動以太網IP地址

現在我知道我可以用得到當前分配給本機的IP地址列表:

IPHostEntry entry = Dns.GetHostEntry(Dns.GetHostName()); 

而且我知道我可以用得到的大量信息對我的不同的網絡接口:

NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces(); 

我可以使用NetworkInterfaceType枚舉來確定哪些接口是我的以太網接口,以及接口是否爲「Up」,但我似乎無法找到將此NetworkInterface與相應的IPAddress綁定的方式。從NetworkInterface類中,我只能看到如何獲取Anycast地址或網關地址等內容,但沒有什麼能夠幫助我縮小哪些是以太網IP。

有沒有人知道一種方法來做到這一點,無論是簡單還是複雜?

編輯: 例如命令行上的netstat或tracert可以提供所有活動的網絡連接。對我來說這似乎很奇怪,.net不會有類似的東西,我認爲解析命令行結果似乎完全不合理。 像GetBestInterface()這樣的東西似乎很有用,但它只會返回到可以訪問給定其他IP的IP。再次,不是很多才多藝。

如果沒有其他方式可以使用C#來獲得活動的IP地址,那麼就這樣吧,我將使用命令行,但它看起來好像是一種流行的編程語言應該能夠做到的。事實上,如果任何人有一個C++或C的解決方案,我可以連接到我的C#應用​​程序,也可以。

+0

如果有多個活動的IP地址會怎麼樣?或者多個以太網適配器? –

+0

如果有1個以上的有源以太網適配器,那麼我可以很好的完成所有這些。 – user912447

+0

即使只是一個可能含糊不清的東西的鏈接也會很棒。 – user912447

回答

2

所以這裏一個有用的統計是給定接口上的總接收字節數。

NetworkInterface.GetIPv4Statistics().BytesReceived 

會同使用此:

NetworkInterface.OperationalStatus 

可以告訴你,如果它是目前「向上」和是否已接收到的數據包中來。在無線的情況下,如果OperationalStatus目前沒有連接,則它處於「關閉」狀態,但在以太網的情況下,即使沒有連接電纜,它仍然保持「Up」狀態。我認爲這是因爲物理電纜不是必需的給一個IP地址,但問題是,我想知道,如果因未連接而試圖使用該地址會浪費處理能力。

最後,追平該地址的網絡是非常簡單的:

UnicastIPAddressInformationCollection ipc = NetworkInterface.GetIPProperties().UnicastAddresses; 

這樣,您訪問特定的NetworkInterface獲取其IP地址。這通常返回IPv4和IPv6地址。