Почему я получаю:: 1 как IP-адрес в ASP.Net.. и как получить правильный IP-адрес?

Я запускаю приложение ASp.Net MVC на сервере localhost - dev, предоставленном Visual Studio. Я хочу получить IP-адрес. Я пытался

Request.UserHostAddress

и

Request.ServerVariables("REMOTE_ADDR")

В обоих случаях я получаю :: 1 в результате. Что это такое? Почему я это получаю? Как я могу получить 127.0.0.1 или 192.168.1.xxx?

Ответы

Ответ 1

Вы получаете действительный IP-адрес. ::1 - local_host в IPv6. (подчеркивание, используемое в local_host, чтобы остановить SO от мысли, что это какой-то плохой текст)

Ответ 2

То, что вы видите при вызове 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. Вы должны быть в состоянии взять этот пример и создать быстрый вспомогательный метод для достижения этой цели.

Ответ 3

Request.Params["REMOTE_ADDR"]

вместо Request.ServerVariables("REMOTE_ADDR")

Ответ 4

Если вы хотите, чтобы 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

Ответ 5

ниже код, который я использовал для нахождения 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;
        }