Ответ 1
Вы получаете действительный IP-адрес. ::1
- local_host в IPv6. (подчеркивание, используемое в local_host, чтобы остановить SO от мысли, что это какой-то плохой текст)
Я запускаю приложение ASp.Net MVC на сервере localhost - dev, предоставленном Visual Studio. Я хочу получить IP-адрес. Я пытался
Request.UserHostAddress
и
Request.ServerVariables("REMOTE_ADDR")
В обоих случаях я получаю :: 1 в результате. Что это такое? Почему я это получаю? Как я могу получить 127.0.0.1 или 192.168.1.xxx?
Вы получаете действительный IP-адрес. ::1
- local_host в IPv6. (подчеркивание, используемое в local_host, чтобы остановить SO от мысли, что это какой-то плохой текст)
То, что вы видите при вызове localhost, действительно. :: 1 - это адрес обратной связи IPv6. Эквивалент 127.0.0.1 для IPv4.
Вместо звонка:
http://localhost/...
вызова:
http://{machinename}/...
-or-
http://127.0.0.1/...
-or-
http://192.168.1.XXX/...
[Замените {имя_машины} именем вашего компьютера. Замените XXX IP-адресом вашего компьютера.]
Любой, кто звонит на вашу машину в приложение MVC, получит свой действительный IP-адрес. Если клиент является хостом IPv6, он сохранит там IP-адрес IPv6. Если клиент является хостом IPv4, он сохранит там IP-адрес IPv4.
Если вы всегда хотите сохранить адрес IPv4, ознакомьтесь с этой статьей о том, как они достигли этого с помощью простого класса http://www.4guysfromrolla.com/articles/071807-1.aspx. Вы должны быть в состоянии взять этот пример и создать быстрый вспомогательный метод для достижения этой цели.
Request.Params["REMOTE_ADDR"]
вместо Request.ServerVariables("REMOTE_ADDR")
Если вы хотите, чтобы localhost возвращал 127.0.0.1, возможно, вам нужно изменить файл "hosts". Вы можете найти его в "% systemdrive%\Windows\System32\drivers\etc"
Он работает для меня, теперь я получаю 127.0.0.1 с помощью "Request.ServerVariables [" REMOTE_ADDR "]". Я раскомментирую 127.0.0.1 (удалить #).
Здесь вы можете найти файл hosts по умолчанию http://support.microsoft.com/kb/972034
Мой файл
# Разрешение имен localhost обрабатывается в самом DNS.
127.0.0.1 localhost
#:: 1 localhost
ниже код, который я использовал для нахождения ip
public static string GetIp()
{
var Request = HttpContext.Current.Request;
try
{
Console.WriteLine(string.Join("|", new List<object> {
Request.UserHostAddress,
Request.Headers["X-Forwarded-For"],
Request.Headers["REMOTE_ADDR"]
})
);
var ip = Request.UserHostAddress;
if (Request.Headers["X-Forwarded-For"] != null)
{
ip = Request.Headers["X-Forwarded-For"];
Console.WriteLine(ip + "|X-Forwarded-For");
}
else if (Request.Headers["REMOTE_ADDR"] != null)
{
ip = Request.Headers["REMOTE_ADDR"];
Console.WriteLine(ip + "|REMOTE_ADDR");
}
return ip;
}
catch (Exception ex)
{
Log.WriteInfo("Message :" + ex.Message + "<br/>" + Environment.NewLine +
"StackTrace :" + ex.StackTrace);
}
return null;
}