在我的网卡的属性部分,在Windows Server 2008上,我禁用了IPV6,只启用了IPV4。
但是在ASP.NET中,Request.UserHostAddress返回':: 1',即IPV6地址。
有谁知道如何恢复到IPV4?
答案 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
答案 2 :(得分:4)
转到开始 - >单击控制面板 - >单击控制面板窗口中的View network status and tasks
- >点击change adapter settings
窗口中的Network and Sharing Center
。
Network Connections
窗口。在这里,您右键单击要禁用IPv6的network adapter
(可以是无线适配器或有线以太网适配器),然后单击Properties
。
在network adapter properties
窗口中,取消选中Internet Protocol Version 6 (TCP/IPv6)
,然后点击“确定”。
在命令提示符下键入regedit
以启动注册表编辑器,继续在注册表编辑器中找到以下注册表项。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents
如果DisabledComponents
项目不可用,您必须按照以下格式创建,方法是转到编辑 - >新 - > DWORD(32位)值并将值设置为0xffffffff
(只需键入ffffffff
)。这将禁用除IPv6环回接口之外的所有IPv6功能,最后单击OK
。
重新启动计算机。