如何获取本地IP?

时间:2011-04-25 15:17:11

标签: c# asp.net ip-address

我在这个帖子中读到了这个问题:How to get the IP address of the server on which my C# application is running on?

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

string hostname = Dns.GetHostName();
IPHostEntry ip = Dns.GetHostEntry(hostname);

它在论证的第二行给了我一个错误:

  

字段初始值设定项无法引用   非静态字段,方法或   属性。

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

3 个答案:

答案 0 :(得分:2)

public static String GetIP()
{
    String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

   if(string.IsNullOrEmpty(ip))
    {
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    }

    return ip;
}

答案 1 :(得分:1)

//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");

答案 2 :(得分:0)

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

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地址”是什么意思?