Как я могу получить IP-адрес клиентского устройства, подключенного через терминальные службы? - PullRequest
1 голос
/ 17 июня 2019

Задача

Мне нужно получить клиентский IP-адрес пользователя, подключенного через RDP / TS, с сайта ASP.

Пример данных

  • Сервер, на котором размещен сайт, - 10.1.0.1.
  • Компьютер пользователя подключен к терминальному серверу с IP-адресом 10.2.0.1.
  • Пользователь находится на физическом клиенте с IP-адресом 10.3.0.1.

Попытки решения

Я попытался извлечь данные из заголовков.

  • Request.ServerVariables["REMOTE_HOST"] 10.2.0.1
  • Request.ServerVariables["HTTP_X_FORWARDED_FOR"] [пусто]
  • Request.ServerVariables["REMOTE_ADDR"] 10.2.0.1
  • Request.UserHostAddress 10.2.0.1

Я тоже попробовал эти методы.

public static string getIP()
{
  string ips = string.Empty;
  string hostName = HttpContext.Current.Request.UserHostAddress.ToString();
  IPAddress[] ipAddresses = Dns.GetHostAddresses(hostName);
  foreach (IPAddress ipAddress in ipAddresses)
  {
    ips += ipAddress + "<br />";
  }
  return ips;
}

Возвращает 10.2.0.1.

public static string GetIPAddress()
{
  string ipAddress = "";
  string Hostname = Environment.MachineName;
  IPHostEntry Host = Dns.GetHostEntry(Hostname);
  foreach (IPAddress IP in Host.AddressList)
  {
    if (IP.AddressFamily == AddressFamily.InterNetwork)
    {
      ipAddress= Convert.ToString(IP);
    }
  }
  return ipAddress;
}

Возвращает 10.1.0.1.

Вопрос

Возможно ли вернуть 10.3.0.1, так как существует дополнительный переход от физического клиента пользователя через TS к веб-серверу? Возможно ли это с другим языком - например, PHP?

...