IIS Request.UserHostAddress returning IPV6 (::1), even when IPV6 disabled
Solution 1:
The 4 Guys from Rolla website has a solution here, which I've used in my app.
Update:
Just in case this link goes dead, here is code based on this link:
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();
}
Solution 2:
If you're connecting to localhost (::1 / 127.0.0.1), you're not using the network card that your server has, but rather like a virtual card that windows has. I don't think there is anyway to configure the loopback card and removing IPv6 from it, not without removing support from the whole system, but in Win2008 you probably can't do that anymore.
You can verify that your physical card isn't being used by running network packet capturing utils. In windows, you can never sniff out the traffic that walks the virtual loopback card.
That said, should you access from a different machine (through a connection that will be passing through your physical card), you should see an IPv4 address being returned by Request.UserHostAddress
Solution 3:
Go to Start -> click on Control Panel -> click on
View network status and tasks
in Control Panel window -> click onchange adapter settings
inNetwork and Sharing Center
window.Network Connections
window will appear. Here you right click on thenetwork adapter
(can be wireless adapter or wired Ethernet adapter) that you wish to disable IPv6 and clickProperties
.In the
network adapter properties
window, untickInternet Protocol Version 6 (TCP/IPv6)
and click OK.-
Type
regedit
in command prompt to launch registry editor, proceed to locate following registry item in Registry editor.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents
If the
DisabledComponents
item is unavailable, you must create it in following format by going to Edit -> New -> DWORD (32-bit) Value and set the value to0xffffffff
(just typeffffffff
). This will disable all IPv6 features except the IPv6 loopback interface, finally clickOK
.Restart the computer.