Задача
Мне нужно получить клиентский 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?