IP-адрес клиентского компьютера - PullRequest
3 голосов
/ 19 апреля 2010

Пожалуйста, дайте мне знать, как получить IP-адрес клиента,

Я перепробовал все перечисленные ниже действия, но получаю тот же вывод: 127.0.0.1

string strClientIP;
strClientIP = Request.UserHostAddress.ToString();

string strHostName = System.Net.Dns.GetHostName();
string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();

string ipaddress = string.Empty ;
ipaddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (ipaddress == "" || ipaddress == null)
    ipaddress = Request.ServerVariables["REMOTE_ADDR"];

Как я могу получить правильный IP?

Ответы [ 2 ]

4 голосов
/ 19 апреля 2010

Вы на правильном пути с REMOTE_ADDR, но он может не работать, если вы заходите на сайт локально, он покажет локальный хост.

REMOTE_ADDR - это заголовок, который содержит IP-адрес клиента, который вы должны сначала проверить.

Вам также следует проверить заголовок HTTP_X_FORWARDED на случай, если вы посещаете прокси-сервер. Помните, что HTTP_X_FORWARDED - это массив, который может содержать несколько значений, разделенных запятыми, в зависимости от количества прокси.

Вот небольшой фрагмент кода c #, показывающий определение ip клиента:

 string clientIp = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
 if( !string.IsNullOrEmpty(clientIp) ) {
  string[] forwardedIps = clientIp.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries );
  clientIp = forwardedIps[forwardedIps.Length - 1];
 } else {
  clientIp = context.Request.ServerVariables["REMOTE_ADDR"];
 }
1 голос
/ 19 апреля 2010

Если вы подключаетесь через адрес localhost, ваш клиентский адрес также будет отображаться как localhost (так как он будет маршрутизироваться через адаптер обратной связи)

...