在我的网卡的属性部分,在 windows server 2008 上,我禁用了 IPV6,只启用了 IPV4。
但是在 ASP.NET 中,Request.UserHostAddress 返回 '::1',一个 IPV6 地址。
有谁知道如何恢复到 IPV4?
Rolla 网站的 4 Guys 在这里有一个解决方案,我在我的应用程序中使用了它。
更新:
以防万一此链接失效,以下是基于此链接的代码:
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
转到开始 -> 单击控制面板 ->View network status and tasks
在控制面板窗口中单击 ->change adapter settings
在Network and Sharing Center
窗口中单击。
Network Connections
窗口将出现。在这里,您右键单击network adapter
要禁用 IPv6 的(可以是无线适配器或有线以太网适配器),然后单击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
。
重新启动计算机。