IIS Request.UserHostAddress возвращает IPV6 (::1), даже если IPV6 отключен.

StackOverflow https://stackoverflow.com/questions/1932843

  •  20-09-2019
  •  | 
  •  

Вопрос

В разделе свойств моей сетевой карты на сервере 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();
}
  1. Заходим в Пуск -> нажимаем «Панель управления» -> нажимаем View network status and tasks в окне Панели управления -> нажмите на change adapter settings в Network and Sharing Center окно.

  2. Network Connections появится окно.Здесь вы щелкаете правой кнопкой мыши по network adapter (может быть беспроводной адаптер или проводной адаптер Ethernet), который вы хотите отключить IPv6, и нажмите Properties.

  3. в network adapter properties окно, убери галочку Internet Protocol Version 6 (TCP/IPv6) и нажмите ОК.

  4. Тип regedit В командной строке для запуска редактора реестра перейдите к поиску следующего элемента реестра в редакторе реестра.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents
    
  5. Если DisabledComponents элемент недоступен, вы должны создать его в следующем формате, выбрав «Редактировать» -> «Создать» -> «Значение DWORD (32-разрядное)» и установить значение 0xffffffff (просто введите ffffffff).Это отключит все функции IPv6, кроме интерфейса обратной связи IPv6. Наконец нажмите OK.

  6. Перезагрузите компьютер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top