2012-07-03 67 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地址。