2009-12-19 2 views
25

В разделе свойств моей сетевой карты на сервере Windows 2008 отключен IPV6, оставив только IPV4 включенным.IIS Request.UserHostAddress, возвращающий IPV6 (:: 1), даже если отключен IPV6

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

У кого-нибудь есть идея, как вернуться к IPV4?

+0

Если вы читаете это сегодня, спустя годы после его первоначального опубликования, это общедоступное объявление об услугах: вам в конечном итоге нужно будет заставить вашу программу работать с IPv6. Начиная с Server 2008/Vista, отключение IPv6 в Windows является _untested и unsupported_ от Microsoft, которые считают IPv6 частью _mandatory_ Windows. –

ответ

22

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

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

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

28

4 Ребята из веб-Ролла имеет решение here, которое я использовал в своем приложении.

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

Чистое решение, не требует изменения конфигурации, работает на локальной машине. –

4
  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) и нажать OK.

  4. Введите regedit в командной строке, чтобы запустить редактор реестра, перейдите к следующему элементу реестра в редакторе реестра.

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

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

Смежные вопросы