-2

我正在使用代码

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”

4

3 回答 3

2

第一个地址 192.168.1.4 是 IPv4,第二个地址 2002:cc5d:a178::cc5d:a178 是 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 分辨率。

于 2013-07-29T13:28:08.640 回答
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
于 2013-07-29T13:38:09.943 回答
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();
于 2013-07-29T13:40:13.010 回答