Muthu Vinoth Kumar Ответов: 4

Как получить IP-адрес пользователя с помощью c#


мне нужно получить IP-адрес пользователя.... я использую приведенный ниже код

private string GetIP()
    {
        string strHostName = "";
        strHostName = System.Net.Dns.GetHostName();

        IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);

        IPAddress[] addr = ipEntry.AddressList;

        return addr[addr.Length - 1].ToString();

    }


он работал на местном сайте...Но после публикации моего сайта он возвращает ipaddress в следующем формате:
"2001:0:4137:9e76:3c60:3e18:935c:505"
я не знаю, в чем моя ошибка.. Как я могу получить IP-адрес?..
если кто-нибудь знает мою ошибку, объясните мне..


Спасибо Н сообщить об этом администрации..

Tien Nhat

спасибо

ritzshaani

На самом деле, я пытаюсь узнать IP-адрес ПК , который находится за публичным IP-адресом .NET code возвращает IP-адрес сервера, а не клиента. Можете ли вы помочь мне узнать какой-либо метод в ASp.net чтобы узнать фактический IP ,например, 10.183....?

4 Ответов

Рейтинг:
36

Ravi Shankar K

Вот решение для получения всего допустимого списка адресов IP4

public static IEnumerable<string> GetAddresses()
{
     var host = Dns.GetHostEntry(Dns.GetHostName());
     return (from ip in host.AddressList where ip.AddressFamily == AddressFamily.InterNetwork select ip.ToString()).ToList();
}
</string>

о приведенном выше решении AddressFamily.Интернет-сеть фильтрует IP4-адрес из AddressFamily.

Если вы хотите, чтобы ваша система действительный IP-адрес, я лично предлагаю следующее решение

public static IPAddress GetIPAddress(string hostName)
{
    Ping ping = new Ping();
    var replay = ping.Send(hostName);

    if (replay.Status == IPStatus.Success)
    {
        return replay.Address;
    }
    return null;
 }

public static void Main()
{
    Console.WriteLine("Local IP Address: " + GetIPAddress(Dns.GetHostName()));
    Console.WriteLine("Google IP:" + GetIPAddress("google.com");
    Console.ReadLine();
}


Renju Vinod

+5

King Fisher

это прекрасно

Рейтинг:
1

uspatel

Воспользуйся

using System;
using System.Net;

public class IPNetworking
{
  public static string GetIP4Address()
  {
    string IP4Address = String.Empty;

    foreach (IPAddress IPA in Dns.GetHostAddresses(Request.ServerVariables["REMOTE_ADDR"].ToString())))
    {
      if (IPA.AddressFamily.ToString() == "InterNetwork")
      {
        IP4Address = IPA.ToString();
        break;
      }
    }

    if (IP4Address != String.Empty)
    {
      return IP4Address;
    }

    foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
    {
      if (IPA.AddressFamily.ToString() == "InterNetwork")
      {
        IP4Address = IPA.ToString();
        break;
      }
    }

    return IP4Address;
  }
}


Muthu Vinoth Kumar

он возвращает 127.0.0.1

uspatel

Каков ваш IP-адрес?

Muthu Vinoth Kumar

191.186.1.52

uspatel

попробуйте обновить ответ

Muthu Vinoth Kumar

второе кодирование foreach возвращает мой ip-адрес правильно...
что перепад ч/б сначала по каждому элементу и по каждому элементу второго

uspatel

Может быть,это связано с запуском на localhost?

Muthu Vinoth Kumar

Произошла ошибка..
Ссылка на объект, необходимых для поля изменчивые, метод или система "имущество".Веб.Пользовательского интерфейса.Страницы.Запрос.вам

Как это исправить?

uspatel

использовать это
этот.Запрос.ServerVariables["REMOTE_ADDR"].Метод toString()

Muthu Vinoth Kumar

CS0026: Ключевое слово "this" недопустимо в статическом свойстве, статическом методе или инициализаторе статического поля

uspatel

сделайте метод нестатическим а затем используйте

uspatel

проверьте обновленные ответ

Muthu Vinoth Kumar

он возвращает 127.0.0.1

uspatel

запустите его на iis,он возвращает правильный ip-адрес

Muthu Vinoth Kumar

мне нужно пробежаться по интернету..работает ли он?

uspatel

Да,это работает.....

Muthu Vinoth Kumar

спасибо

Mas11

Хороший Код ! работать на меня :)

Priyanka Sundaraj

Большое спасибо за этот код

Рейтинг:
1

tanweer

привет,
попробуйте это, он вернет ваш IP-адрес

string ip = "";
string strHostName = "";
strHostName = System.Net.Dns.GetHostName();

IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);

IPAddress[] addr = ipEntry.AddressList;

ip = addr[2].ToString();


Nijel Sabra

Привет кодер,

Dns.GetHostEntry(strHostName); will возвращает 1) AddressList 2)псевдонимы и 3)имя хоста
а вот какой "IPAddress[] addr = ipEntry.AddressList" берется, но этот IPAddress[] содержит только две позиции индекса ,там будет araise IndexOutofRangeException
Так что плз используйте это
ip = addr[2].ToString(); или
IP-адрес = адрес[эл.Длина-1].Метод toString();

Спасибо,
Ниджел

Рейтинг:
1

joginder-banger

private string GetIP()
    {
        string strHostName = "";
        strHostName = System.Net.Dns.GetHostName();

        IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);

        string ipaddress =convert.tostring(ipEntry.AddressList[2]);

        return ipaddress.tostring();

    }