Я занимаюсь разработкой проекта ASP.NET, и мне нужно определить IP-адрес клиента.
В настоящее время следующий код на нашем производственном сервере
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
возвращает IP-адрес, который находится в той же подсети, что и IP-адрес производственного сервера (т. Е. Не решает мою проблему, поскольку
IP-адрес клиента).
Однако на нашем тестовом сервере эта же строка кода возвращает IP-адрес клиента (желаемый результат). У кого-нибудь есть идеи, почему?
Я пытался использовать вышеприведенную строку подстановки кода в следующих значениях, все из которых возвращают ноль или пустую строку:
"HTTP_X_COMING_FROM"
"HTTP_X_FORWARDED_FOR"
"HTTP_X_FORWARDED"
"HTTP_X_REAL_IP"
"HTTP_VIA"
"HTTP_COMING_FROM"
"HTTP_FORWARDED_FOR"
"HTTP_FORWARDED"
"HTTP_FROM"
"HTTP_PROXY_CONNECTION"
"CLIENT_IP"
"FORWARDED"
В качестве альтернативы я нашел следующий код, который возвращает массив IP и содержит IP-адрес клиента (в индексе 4):
string strHostName = System.Net.Dns.GetHostName();
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
string ip = addr[4] != null ? addr[4].ToString() : "";
Во время отладки я заметил, что объекты IPAddress в addr имеют либо (A) ошибки адреса, если это адрес IPv6, либо (B) ошибки ScopeId
если это адрес IPv4. Эти ошибки, похоже, не являются проблемой, но я не уверен, будут ли они когда-нибудь иметь значение в работе.
Есть ли лучший способ получить IP-адрес клиента, чем у меня здесь?