在我的网卡的属性部分,在Windows Server 2008上,我禁用了IPV6,只启用了IPV4.
但是在ASP.NET中,Request.UserHostAddress返回':: 1',即IPV6地址.
有谁知道如何恢复到IPV4?
来自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(); }
如果您要连接到localhost(:: 1/127.0.0.1),则不是使用服务器所具有的网卡,而是使用Windows所具有的虚拟卡.我不认为有任何方法可以配置环回卡并从中删除IPv6,而不是从整个系统中删除支持,但在Win2008中你可能不能再这样做了.
您可以通过运行网络数据包捕获工具来验证您的物理卡未被使用.在Windows中,您永远无法嗅出走过虚拟环回卡的流量.
也就是说,如果您从其他计算机访问(通过将通过您的物理卡的连接),您应该看到返回的IPv4地址 Request.UserHostAddress