IIS Request.UserHostAddress返回IPV6(:: 1),即使禁用IPV6也是如此

时间:2009-12-19 12:51:15

标签: c# asp.net ipv6 ipv4

在我的网卡的属性部分,在Windows Server 2008上,我禁用了IPV6,只启用了IPV4。

但是在ASP.NET中,Request.UserHostAddress返回':: 1',即IPV6地址。

有谁知道如何恢复到IPV4?

3 个答案:

答案 0 :(得分:34)

来自Rolla网站的4位家伙有一个解决方案here,我在我的应用中使用过。

更新

以防此链接失效,以下是基于此链接的代码:

public string GetIpAddress()
{
    string ipAddressString = HttpContext.Current.Request.UserHostAddress;

    if (ipAddressString == null)
        return null;

    IPAddress ipAddress;
    IPAddress.TryParse(ipAddressString, out ipAddress);

    // If we got an IPV6 address, then we need to ask the network for the IPV4 address 
    // This usually only happens when the browser is on the same machine as the server.
    if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
    {
        ipAddress = System.Net.Dns.GetHostEntry(ipAddress).AddressList
            .First(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork);
    }

    return ipAddress.ToString();
}

答案 1 :(得分:23)

如果您要连接到localhost(:: 1 / 127.0.0.1),则不是使用服务器所具有的网卡,而是使用Windows所拥有的虚拟卡。我不认为有任何方法可以配置环回卡并从中删除IPv6,而不是从整个系统中删除支持,但在Win2008中你可能不能再这样做了。

您可以通过运行网络数据包捕获工具来验证您的物理卡未被使用。在Windows中,您永远无法嗅出走过虚拟环回卡的流量。

也就是说,如果您从其他计算机访问(通过将通过您的物理卡的连接),您应该会看到Request.UserHostAddress

返回的IPv4地址

答案 2 :(得分:4)

  1. 转到开始 - >单击控制面板 - >单击控制面板窗口中的View network status and tasks - >点击change adapter settings窗口中的Network and Sharing Center

  2. 将出现
  3. Network Connections窗口。在这里,您右键单击要禁用IPv6的network adapter(可以是无线适配器或有线以太网适配器),然后单击Properties

  4. network adapter properties窗口中,取消选中Internet Protocol Version 6 (TCP/IPv6),然后点击“确定”。

  5. 在命令提示符下键入regedit以启动注册表编辑器,继续在注册表编辑器中找到以下注册表项。

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents
    
  6. 如果DisabledComponents项目不可用,您必须按照以下格式创建,方法是转到编辑 - >新 - > DWORD(32位)值并将值设置为0xffffffff(只需键入ffffffff)。这将禁用除IPv6环回接口之外的所有IPv6功能,最后单击OK

  7. 重新启动计算机。