.NET获得活动的以太网IP地址

时间:2012-07-03 14:31:34

标签: .net ip-address network-interface

我希望在.net中获取活动IPAddress,在这种情况下是与以太网适配器关联的地址。

现在我知道我可以使用以下命令获取当前分配给该机器的IP列表:

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

我知道我可以使用以下方法获取有关我的不同网络接口的大量信息:

NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces();

我可以使用NetworkInterfaceType枚举确定哪些接口是我的以太网接口,以及接口是否为“Up”,但我似乎无法找到将此NetworkInterface绑定到相应IP地址的方法。在NetworkInterface类中,我只能看到如何获取Anycast地址或网关地址等内容,但没有什么可以帮助我缩小哪个是我的以太网IP。

有没有人知道这样做的方法,无论是简单还是复杂?

编辑: 例如,命令行上的netstat或tracert可以提供所有活动的网络连接。我觉得奇怪的是.net不会有类似的东西,对我来说解析命令行结果似乎完全不合情理。 像GetBestInterface()这样的东西似乎很有用但它只会返回有权访问给定其他IP的IP。再次,不是非常多才多艺。

如果没有其他方法可以使用C#获取活动的IP地址,那么就这样吧,我将使用命令行,但它实际上似乎是一种流行的编程语言应该能够做到的事情。事实上,如果有人有C ++或C解决方案,我可以连接到我的C#应用​​程序也可以。

1 个答案:

答案 0 :(得分:2)

这里一个有用的统计数据是给定接口上的总接收字节数。

NetworkInterface.GetIPv4Statistics().BytesReceived

结合使用:

NetworkInterface.OperationalStatus

可以告诉您当前是否“Up”以及过去是否收到了数据包。在无线的情况下,如果当前没有连接,则OperationalStatus为“Down”,但在以太网的情况下,即使没有插入电缆,它仍然是“Up”。我认为这是因为物理电缆不需要给出一个IP地址,但问题是我想知道由于它没有被连接而试图使用该地址是否会浪费处理能力。

最后,将该地址绑定到网络非常简单:

UnicastIPAddressInformationCollection ipc = NetworkInterface.GetIPProperties().UnicastAddresses;

通过这种方式,您可以访问特定的NetworkInterface以获取其IP地址。这通常会返回IPv4和IPv6地址。