首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从返回的多个IP地址确定以太网适配器局域网连接IPv4地址

从返回的多个IP地址确定以太网适配器局域网连接IPv4地址
EN

Stack Overflow用户
提问于 2014-03-10 21:56:14
回答 3查看 1.7K关注 0票数 1

我正在使用下面的代码检索IPv4地址(以太网适配器本地连接)。但是我看到代码返回了多个地址。有没有办法说明返回的地址中哪些是以太网适配器本地连接IP地址?

代码语言:javascript
复制
    List<string> all = new List<string>();
    string hostName = Dns.GetHostName();
    IPHostEntry hostEntry = Dns.GetHostEntry(hostName);
    foreach (IPAddress address in hostEntry.AddressList)
    {
        if (address.AddressFamily == AddressFamily.InterNetwork)
            all.Add(address.ToString() + "\n");
    }

    dataGridView2.DataSource = all.Select(x => new { Value = x }).ToList();
}

当前,上面的代码返回3个值。

  • 172.20.***.***
  • 192.168.***.***
  • 192.168.***.***

以太网适配器局域网连接IP地址为172.20.***.***

EN

回答 3

Stack Overflow用户

发布于 2014-03-10 22:31:23

您是否正在寻找属性NetworkInterfaceType和AddressFamily的连接?

代码语言:javascript
复制
foreach (var i in NetworkInterface.GetAllNetworkInterfaces())
{
   Console.WriteLine("{0} ({1})", i.Name, i.NetworkInterfaceType);
   foreach (var a in i.GetIPProperties().UnicastAddresses)
   {
      Console.WriteLine("      {0} ({1})", a.Address, a.Address.AddressFamily);
   }
}

例如,这将给您提供:

Local Area Connection (Ethernet) (InterNetworkV6) 169.254.171.253 (InterNetwork)

票数 2
EN

Stack Overflow用户

发布于 2014-03-11 16:28:29

假设只有一个感兴趣的连接有一个IPv4地址,请考虑如下所示:

代码语言:javascript
复制
var connectionName = "Ethernet Adapter Local Area Connection";
var connection =
    NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(
        ni => ni.Name == connectionName);
if (connection != null)
{
    Console.WriteLine("Connection \"{0}\" found.", connectionName);

    // Use a regex to focus on the IPv4 address and ignore the IPv6 address if
    // present.
    var ipV4Regex = new Regex("(?<IPv4Address>([0-9]{1,3}\\.){3}[0-9]{1,3})");
    var unicastAddresses = connection.GetIPProperties().UnicastAddresses;
    var ipV4Address =
        unicastAddresses.FirstOrDefault(
            ua => ipV4Regex.Match(ua.Address.ToString()).Success);

    if (ipV4Address != null)
        Console.WriteLine("IPv4 address {0} found.", ipV4Address.Address);
    else
        Console.WriteLine("IPv4 address not found.");
}
else
{
    Console.WriteLine("Connection \"{0}\" not found.", connectionName);
}

为了清晰起见,我使用了控制台输出,但是您应该发现这可以用于分配dataGridView2.DataSource

票数 0
EN

Stack Overflow用户

发布于 2015-11-23 14:11:38

代码语言:javascript
复制
    {
        var sb = new StringBuilder();

        NetworkInterface[] networkInterfaces =
            NetworkInterface.GetAllNetworkInterfaces();

        foreach (NetworkInterface network in networkInterfaces)
        {
            IPInterfaceProperties properties = network.GetIPProperties();
            foreach (UnicastIPAddressInformation address in
                properties.UnicastAddresses)
            {
                if (address.Address.AddressFamily != AddressFamily.InterNetwork)  // We're only interested in IPv4 addresses for now 
                    continue;
                if (IPAddress.IsLoopback(address.Address))  // Ignore loopback addresses (e.g., 127.0.0.1) 
                    continue;
                if (network.OperationalStatus == OperationalStatus.Up)
                    sb.AppendLine(address.Address.ToString() + " (" + network.Name + ")");
            }
        }
        Console.WriteLine(sb.ToString());
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22312175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档