Как получить локальный IP? - PullRequest
0 голосов
/ 25 апреля 2011

Я читал этот вопрос в этой теме: Как получить IP-адрес сервера, на котором запущено мое приложение C #?

Но этот код не работает для меня:

string hostname = Dns.GetHostName();
IPHostEntry ip = Dns.GetHostEntry(hostname);

Это дает мне ошибку во второй строке аргумента:

Инициализатор поля не может ссылаться на нестатическое поле, метод или свойство.

Я хочу сохранить свой локальный IP-адрес моей машины в строке.Это все!

Ответы [ 3 ]

2 голосов
/ 25 апреля 2011
public static String GetIP()
{
    String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

   if(string.IsNullOrEmpty(ip))
    {
        ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    }

    return ip;
}
1 голос
/ 25 апреля 2011
//This will return the collection of local IP's
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

public static bool IsLocalIpAddress(string host)
{
  try
  { // get host IP addresses
    IPAddress[] hostIPs = Dns.GetHostAddresses(host);
    // get local IP addresses
    IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

    // test if any host IP equals to any local IP or to localhost
    foreach (IPAddress hostIP in hostIPs)
    {
      // is localhost
      if (IPAddress.IsLoopback(hostIP)) return true;
      // is local address
      foreach (IPAddress localIP in localIPs)
      {
        if (hostIP.Equals(localIP)) return true;
      }
    }
  }
  catch { }
  return false;
}
//Call this method this will tell Is this your local Ip
IsLocalIpAddress("localhost");
0 голосов
/ 25 апреля 2011

В ASP.Net вы можете получить IP-адрес, на который был сделан запрос, из объекта Request:

string myIpAddress = Request.UserHostAddress ;

Это может быть адрес IPv4 или IPv6. Чтобы выяснить это, проанализируйте его в System.Net.IPAddress:

IPAddress addr = IPAddress.Parse( myIpAddress ) ;

Если вас интересует IP-адрес текущего хоста, это превращается в гораздо более сложный (интересный?) Вопрос.

На любом данном хосте (и для «хоста» читайте «отдельный компьютер») может быть установлено несколько сетевых карт (Network Interface Card). Каждому сетевому адаптеру (при условии, что он подключен к IP-сети) назначен IP-адрес, и, вероятно, ему назначены как IPv4, так и IPv6-адрес.

Кроме того, каждый сетевой адаптер сам по себе может быть многодомным и иметь дополнительные IP-адреса, назначенные IPv4 и / или IPv6.

Тогда у нас есть IP-петлевой адаптер, для которого каждый хост имеет одинаковые петлевые адреса. Для IPv4 адрес обратной петли определяется как вся подсеть 127/8 (то есть IP-адреса 127.0.0.0 - 127.255.255.255 - все адреса обратной петли IPv4). IPv6 назначает только один адрес обратной связи (:: 1).

Итак, с точки зрения хоста, вам нужно знать контекст (адаптер обратной связи или сетевой адаптер, если сетевой адаптер, какой - Ipv4 или IPv6?). И даже в этом случае вам не гарантирован один IP-адрес. , Вы должны спросить себя, что именно вы подразумеваете под "моим IP-адресом"?

...