服务器上的IP地址无法正常运行

时间:2013-07-29 13:23:48

标签: c# asp.net

我正在使用代码

string host = System.Net.Dns.GetHostName();
string hostname = Dns.GetHostEntry(host).HostName;
IPHostEntry ipEntry = Dns.GetHostEntry(host);
IPAddress[] addr = ipEntry.AddressList;

在本地工作正常并给我“192.168.1.4”但在服务器端它给出“2002:cc5d:a178 :: cc5d:a178”

3 个答案:

答案 0 :(得分:2)

第一个地址192.168.1.4是IPv4,第二个地址2002:cc5d:a178 :: cc5d:a178是IPv6地址。遗憾的是,您无法将IPv6从IPv6转换为IPv4,如下所示:Problem Converting ipv6 to ipv4

  

简单回答:在服务器上禁用IPV6,或从DNS条目中删除服务器的IPV6地址。

     

没有神奇的IPV4< - > IPV6转换器。它们是完全不同的协议,一个地址不转换为另一个。如果要可靠地检索客户端的IPV4地址,则需要确保客户端通过IPV4连接。

更新如果要禁用IPv6(在Windows服务器上),请按照Microsoft支持文章中的说明操作:http://support.microsoft.com/kb/929852但请记住IPv4 慢慢地被IPv6取代,因此您可能最好使用服务器默认IP分辨率。

答案 1 :(得分:1)

你得到> 1 Ip回来了,并且(假设服务器真的得到了一个ipv4地址)你可以只查找IPv4而不是ipV6的地址。像

        string host = System.Net.Dns.GetHostName();
        string hostname = Dns.GetHostEntry(host).HostName;
        IPHostEntry ipEntry = Dns.GetHostEntry(host);
        IPAddress[] addr = ipEntry.AddressList;
        foreach (IPAddress a in addr)
            Console.WriteLine("{0}:{1}", a.AddressFamily, a.ToString());

这将为您提供以下内容:

InterNetworkV6:fe80::c80b:d804:38c3:2734%17
InterNetworkV6:fe80::752d:9c4a:69fd:cb63%15
InterNetwork:169.254.80.80
InterNetwork:10.0.1.17

答案 2 :(得分:0)

你可以使用它。

using System;
using System.Net;

public class IPNetworking
{
  public static string GetIP4Address()
  {
    string IP4Address = String.Empty;

    foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
    {
      if (IPA.AddressFamily.ToString() == "InterNetwork")
      {
        IP4Address = IPA.ToString();
        break;
      }
    }

    if (IP4Address != String.Empty)
    {
      return IP4Address;
    }

    foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
    {
      if (IPA.AddressFamily.ToString() == "InterNetwork")
      {
        IP4Address = IPA.ToString();
        break;
      }
    }

    return IP4Address;
  }

//调用此函数获取Ip

string ClientIP = IP4.GetIP4Address();