当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《IISRequest.UserHostAddress返回IPV6(::1),即使禁用IPV6也是如此》经验,为你挑选了2个好方法。

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

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

有谁知道如何恢复到IPV4?



1> David..:

来自Rolla网站的4个人在这里有一个解决方案,我在我的应用程序中使用过.

更新:

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

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();
}



2> Miguel Ventu..:

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

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

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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有