2

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

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

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

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

NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces();

我可以使用 NetworkInterfaceType 枚举确定哪些接口是我的以太网接口,以及接口是否为“Up”,但我似乎找不到将此 NetworkInterface 绑定到相应 IPAddress 的方法。从 NetworkInterface 类中,我只能看到如何获取诸如任播地址或网关地址之类的东西,但没有任何东西可以帮助我缩小以太网 IP 的范围。

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

编辑:例如命令行上的 netstat 或 tracert 可以提供所有活动的网络连接。对我来说,.net 没有与此类似的东西似乎很奇怪,对我来说解析命令行结果似乎完全没有必要。GetBestInterface() 之类的东西似乎很有用,但它只会返回可以访问给定其他 IP 的 IP。同样,不是很通用。

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

4

1 回答 1

2

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

NetworkInterface.GetIPv4Statistics().BytesReceived

结合使用它:

NetworkInterface.OperationalStatus

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

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

UnicastIPAddressInformationCollection ipc = NetworkInterface.GetIPProperties().UnicastAddresses;

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

于 2012-09-14T04:55:59.063 回答