У меня есть некоторый код в приложении asp.net, который должен получить ipv4-адрес клиентского компьютера (все пользователи находятся в нашей собственной сети). Недавно мы обновили сервер, на котором приложение работает, до сервера Windows 2008. Теперь код Request.UserHostAddress возвращает ipv4, когда клиент установлен на более старой ОС, и ipv6, если он на более новой ОС (Vista и выше). Таким образом, функция, которая полагается на это, работает для некоторых клиентов, а не для других.
Я добавил код, который должен конвертировать из ipv6 в ipv4, чтобы попытаться решить эту проблему. Это из этого онлайн-урока: http://www.4guysfromrolla.com/articles/071807-1.aspx. Я использую dsn.GetHostAddress, а затем перебираю возвращенные IP-адреса, ища тот, который является "InterNetwork"
foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
if (IP4Address != String.Empty)
{
return IP4Address;
}
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
Проблема в том, что это не работает для меня. Клиенты, подключающиеся из ipv4, продолжают возвращать правильный IP-адрес ipv4 клиентского компьютера, но клиенты, подключающиеся из Vista и Windows 7, возвращают IP-адрес ipv4 компьютера SERVER , а не клиентского компьютера.