【问题标题】:How to obtain Local IP?如何获取本地IP?
【发布时间】:2011-08-12 09:35:50
【问题描述】:

我在这个帖子中读到了这个问题: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 存储在一个字符串中。就这样!

【问题讨论】:

  • 在 .NET 2.0、3.5 和 4.0 中为我工作。您的目标是什么版本的 .NET?

标签: c# asp.net ip-address


【解决方案1】:
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;
}

【讨论】:

    【解决方案2】:
    //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");
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-01-28
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 2014-06-26
        • 2012-05-31
        相关资源
        最近更新 更多