IIS Request.UserHostAddress возвращает IPV6 (::1), даже если IPV6 отключен.
Вопрос
В разделе свойств моей сетевой карты на сервере Windows 2008 я отключил IPV6, оставив включенным только IPV4.
Однако в ASP.NET Request.UserHostAddress возвращает «::1» — адрес IPV6.
Кто-нибудь знает, как вернуться на IPV4?
Решение
Если вы подключаетесь к локальному хосту (::1/127.0.0.1), вы используете не сетевую карту, которая есть на вашем сервере, а скорее виртуальную карту, которая есть в Windows.Я не думаю, что есть возможность как-то настроить шлейфовую карту и удалить из нее IPv6, не отключив поддержку всей системы, но в Win2008 вы, вероятно, уже не сможете этого сделать.
Вы можете убедиться, что ваша физическая карта не используется, запустив утилиты захвата сетевых пакетов.В Windows вы никогда не сможете отследить трафик, который проходит через виртуальную карту обратной связи.
Тем не менее, если вы получаете доступ с другого компьютера (через соединение, которое будет проходить через вашу физическую карту), вы должны увидеть адрес IPv4, возвращаемый Request.UserHostAddress
Другие советы
На сайте 4 Guys from Rolla есть решение здесь, который я использовал в своем приложении.
Обновлять:
На всякий случай эта ссылка не работает, вот код, основанный на этой ссылке:
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();
}
Заходим в Пуск -> нажимаем «Панель управления» -> нажимаем
View network status and tasks
в окне Панели управления -> нажмите наchange adapter settings
вNetwork and Sharing Center
окно.Network Connections
появится окно.Здесь вы щелкаете правой кнопкой мыши поnetwork adapter
(может быть беспроводной адаптер или проводной адаптер Ethernet), который вы хотите отключить 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
.Перезагрузите компьютер.