Подтвердить что ты не робот

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

В разделе свойств моей сетевой карты на сервере Windows 2008 я отключил IPV6, оставив только IPV4.

Однако в ASP.NET Request.UserHostAddress возвращает ":: 1", адрес IPV6.

Кто-нибудь понял, как вернуться к IPV4?

4b9b3361

Ответ 1

Если вы подключаетесь к localhost (:: 1/127.0.0.1), вы не используете сетевую карту, имеющуюся на вашем сервере, а скорее как виртуальную карту, которую имеют окна. Я не думаю, что в любом случае можно сконфигурировать loopback-карту и удалить из нее IPv6, не исключая поддержки всей системы, но в Win2008 вы, вероятно, больше не сможете этого делать.

Вы можете проверить, что ваша физическая карта не используется, запустив утилиты захвата сетевых пакетов. В окнах вы никогда не сможете обнюхать трафик, который проходит виртуальную кольцевую карту.

Тем не менее, если вы хотите получить доступ с другой машины (через соединение, которое будет проходить через вашу физическую карту), вы должны увидеть, что адрес IPv4 возвращается Request.UserHostAddress

Ответ 2

У 4 парней с сайта Rolla есть решение здесь, которое я использовал в своем приложении.

Update:

На всякий случай эта ссылка не работает, вот код, основанный на этой ссылке:

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();
}

Ответ 3

  • Перейдите в меню "Пуск" → щелкните "Панель управления" → щелкните по 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 недоступен, вы должны создать его в следующем формате, перейдя в Edit → New → DWORD (32-bit) значение и установите значение 0xffffffff (просто введите ffffffff). Это отключит все функции IPv6, кроме интерфейса loopback IPv6, и, наконец, нажмите OK.

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