Получить IP-адрес из имени хоста

#c# #asp.net #hostname

#c# #asp.net #имя хоста

Вопрос:

Я хочу получить IP-адрес хоста на моей aspx странице с помощью C# , я использую методы класса DNS для их получения.

Локально это работало нормально, но когда я развернул решение на IIS7, оно вернуло только IP-адрес, назначенный провайдером, но мне нужен локальный IP-адрес этого компьютера.

Есть предложения?

Комментарии:

1. Локальный IP-адрес означает адрес, который машина имеет в локальной сети, например 192.168.xxx.xxx

2. Таким образом, HTTP_X_FORWARDED_FOR предложенный Мухаммедом Ахтаром — ваш лучший выбор.

Ответ №1:

Вот пример для этого. В этом примере мы можем получить IP-адрес из нашего заданного имени хоста.

     string strHostName = "www.microsoft.com";
    // Get DNS entry of specified host name
    IPAddress[] addresses = Dns.GetHostEntry(strHostName).AddressList;

    // The DNS entry may contains more than one IP addresses.
    // Iterate them and display each along with the type of address (AddressFamily).
    foreach (IPAddress address in addresses)
    {
        Response.Write(string.Format("{0} = {1} ({2})", strHostName, address, address.AddressFamily));
        Response.Write("<br/><br/>");
    }
  

Комментарии:

1. Пожалуйста, обратите внимание, что модераторы и другие пользователи удаляют ваши спам-ссылки на ваш собственный веб-сайт из ваших ответов. Пожалуйста, прекратите включать их, чтобы избежать более жестких санкций за эти ссылки.

Ответ №2:

Я совершенно уверен, что вы не можете получить локальный адрес 192.168.C.D локальной машины таким образом.

Это из-за безопасности и видимости (NAT и т.д.).

Если вы хотите однозначно идентифицировать пользователя. Я бы посмотрел на сеансы или файлы cookie.

Ответ №3:

При поиске ip-адреса в общедоступном DNS вы получите официальный IP-адрес, передаваемый наружу. Если используется NAT и вам нужен внутренний адрес, вы должны подключиться к DNS-серверу, который хранит внутренние IP-адреса.

Ответ №4:

вы можете использовать этот метод…

 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. Это самое близкое, что вы можете найти к решению, но это не гарантия, что оно сработает. Промежуточные маршрутизаторы могут устанавливать любой IP-адрес в переменной HTTP_X_FORWARDED_FOR.

2. это для IP-адреса серверной машины, я хочу получить IP-адрес любой машины в локальной сети.

3. Это вернет IP-адрес клиента, можете попробовать.

4. Спасибо за помощь, Ахтар, но проблема в том, что у меня есть имя хоста какой-то машины, и я должен оценить ip этой машины, поможет ли это в данном случае?

5. Вы можете проверить, но я не уверен.