【问题标题】:c# Getting ip addresses of all network interfaces,getting more than one ipv4 addresses per adapterc#获取所有网络接口的ip地址,每个适配器获取多个ipv4地址
【发布时间】:2018-01-26 11:42:27
【问题描述】:

在我的应用中,我需要显示每个可用(wifi 或以太网)适配器的 IP 地址。

问题是每个适配器获得的 IP 地址不止一个,而我获得的最后一个(每个适配器)是我正在寻找的一个。

我不知道前两个(通常是前两个)IP 地址是什么以及如何获得“真实”IP 地址。我将在“真实”之前获得的这两个 IP 地址与 CMD 和“ipconfig”命令进行了比较,它们没有在此处提及,因此它不是默认网关、子网掩码、本地 IPv6 或公共 IP 地址。

这是我的应用输出的内容:

这就是我想要的:

我使用的代码:

foreach (NetworkInterface inf in devs)
{
    if (inf.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || inf.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
    {
        foreach (UnicastIPAddressInformation address in inf.GetIPProperties().UnicastAddresses)
        {
            if (address.Address.AddressFamily == AddressFamily.InterNetwork)
                MessageBox.Show(address.Address.ToString());
        }
    }
}

【问题讨论】:

  • 请向我们展示您的输出
  • 对不起,我现在编辑了问题。 @Junaid
  • 什么是开发者?您怎么知道每个适配器获得了多个地址?
  • NetworkInterface[] devs= NetworkInterface.GetAllNetworkInterfaces();抱歉忘记了
  • 我不清楚你的“真实”IP地址是什么。分配给接口的任何 IP 地址都是真实 IP 地址。使用 IPv6,很容易为每个接口分配多个全局 IP 地址。

标签: c# networking ipv6 ipv4


【解决方案1】:

这是关于如何获取每个适配器的 IP 地址(IPv4 和 IPv6)的答案。

NetworkInterface[] intf = NetworkInterface.GetAllNetworkInterfaces();
foreach(NetworkInterface device in intf)
{
    IPAddress ipv6Address = device.GetIPProperties().UnicastAddresses[0].Address; //This will give ipv6 address of certain adapter
    IPAddress ipv4Address = device.GetIPProperties().UnicastAddresses[1].Address; //This will give ipv4 address of certain adapter
}

【讨论】:

  • 您需要了解接口几乎肯定会有多个 IPv6 地址。每个 IPv6 接口都有一个本地链路 IPv6 地址,并且可能有一个或多个全局和/或 ULA 地址。大多数 IPv4 接口只有一个地址,但 IPv6 可以(并且在许多情况下必须)有多个地址。
猜你喜欢
  • 2013-06-21
  • 2023-04-08
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 2017-10-28
  • 2015-04-04
  • 2014-04-14
  • 2010-12-26
相关资源
最近更新 更多