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

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

Request.UserHostAddress

и

Request.ServerVariables("REMOTE_ADDR")

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

Ответы [ 5 ]

21 голосов
/ 26 апреля 2011

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

15 голосов
/ 26 апреля 2011

То, что вы видите при вызове localhost, действительно.:: 1 - это адрес обратной связи IPv6.Эквивалент 127.0.0.1 для IPv4.

Вместо вызова:

http://localhost/...

Вызов:

http://{machinename}/...
        -or-
http://127.0.0.1/...
        -or- 
http://192.168.1.XXX/...

[Замените {machinename} на имя компьютера вашей машины.Замените XXX IP-адресом вашего компьютера.]

В результате любой, кто будет заходить на вашу машину в приложение MVC, получит действительный IP-адрес.Если клиент является хостом IPv6, он сохранит там IP-адрес IPv6.Если клиент является хостом IPv4, он сохранит там IP-адрес IPv4.

Если вы всегда хотите сохранить адрес IPv4, ознакомьтесь с этой статьей о том, как они достигли этого с помощью простого класса * 1022.* Вы должны быть в состоянии взять там пример и создать быстрый вспомогательный метод для достижения этой цели.

1 голос
/ 14 августа 2014

Если вы хотите, чтобы localhost возвратил 127.0.0.1, возможно, вам нужно изменить файл "hosts". Вы можете найти его в "% systemdrive% \ Windows \ System32 \ drivers \ etc"

Это работает для меня, теперь я получаю 127.0.0.1 с "Request.ServerVariables [" REMOTE_ADDR "]". Раскомментирую 127.0.0.1 (удалить #).

Здесь вы можете найти файл хостов по умолчанию http://support.microsoft.com/kb/972034

Мой файл

# Разрешение имени локального хоста обрабатывается в самом DNS.

127.0.0.1       localhost

# :: 1 localhost

1 голос
/ 26 апреля 2011
Request.Params["REMOTE_ADDR"]

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

0 голосов
/ 13 июля 2018

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