C# 如何获得本地IP?

C# 如何获得本地IP?,c#,asp.net,ip-address,C#,Asp.net,Ip Address,我在这个帖子里读到了这个问题: 但是这个代码对我不起作用: string hostname = Dns.GetHostName(); IPHostEntry ip = Dns.GetHostEntry(hostname); 这让我在论点的第二行上犯了一个错误: 字段初始值设定项无法引用 非静态字段、方法或 财产 我想将我的机器的本地IP存储在一个字符串中。就这些 在ASP.Net中,您可以从请求对象获取请求的IP地址: //This will return the collection of

我在这个帖子里读到了这个问题:

但是这个代码对我不起作用:

string hostname = Dns.GetHostName();
IPHostEntry ip = Dns.GetHostEntry(hostname);
这让我在论点的第二行上犯了一个错误:

字段初始值设定项无法引用 非静态字段、方法或 财产


我想将我的机器的本地IP存储在一个字符串中。就这些

在ASP.Net中,您可以从请求对象获取请求的IP地址:

//This will return the collection of local IP's
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

public static bool IsLocalIpAddress(string host)
{
  try
  { // get host IP addresses
    IPAddress[] hostIPs = Dns.GetHostAddresses(host);
    // get local IP addresses
    IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

    // test if any host IP equals to any local IP or to localhost
    foreach (IPAddress hostIP in hostIPs)
    {
      // is localhost
      if (IPAddress.IsLoopback(hostIP)) return true;
      // is local address
      foreach (IPAddress localIP in localIPs)
      {
        if (hostIP.Equals(localIP)) return true;
      }
    }
  }
  catch { }
  return false;
}
//Call this method this will tell Is this your local Ip
IsLocalIpAddress("localhost");
string myIpAddress = Request.UserHostAddress ;
它可以是IPv4地址或IPv6地址。要找到答案,请将其解析为System.Net.IPAddress:

IPAddress addr = IPAddress.Parse( myIpAddress ) ;
如果您对当前主机的IP地址感兴趣,这将变成一个更复杂(有趣?)的问题

任何给定的主机(对于“主机”而言,读作“单个计算机”)可能安装了多个NIC(网络接口卡)。每个NIC(假设它连接到IP网络)都有一个分配给它的IP地址,并且可能同时有一个IPv4和IPv6地址分配给它

此外,每个NIC本身可以是多宿的,并且具有额外的IP地址,可以是IPv4和/或IPv6分配的

然后是IP环回适配器,每个主机共享相同的环回地址。对于IPv4,环回地址定义为整个127/8子网(即IP地址127.0.0.0–127.255.255.255都是IPv4环回地址)。IPv6只分配一个环回地址(::1)


因此,从主机的角度来看,您需要了解上下文(环回适配器或NIC?如果是NIC,是哪一个?Ipv4还是IPv6?),即使如此,您也不能保证有一个IP地址。你必须问问自己,“我的IP地址”到底是什么意思?

在.NET 2.0、3.5和4.0中适用于我。您的目标是.NET的哪个版本?
IPAddress addr = IPAddress.Parse( myIpAddress ) ;