Получаем все IP-адреса локальной машины (C#)

Тема в разделе "C++ / C# / .NET", создана пользователем Евгенька, 23 мар 2015.

  1. Гость, давай поддержим форум вместе, делись информацией с друзями через кнопки в блоке "Поделиться в социальных сетях"

    Скрыть объявление
  1. Евгенька

    Евгенька Banned

    
    Регистр:
    20 фев 2015
    Сообщения:
    153
    Лайки:
    192
    Дизлайки:
    0
    Баллы:
    30
    Пол:
    Мужской
    Получаем все IP-адреса локальной машины (C#)
    [​IMG]

    Компилировалось в: Visual Studio .NET & Windows XP Pro. Тестировалось на Win2K Server + WinXP Pro.

    Зачем может понадобиться узнать IP-адреса на локальной машине? Компьютер может иметь несколько IP адресов с одной NIC, и при создании сокетного приложения не всегда хочется привязываться (биндится) ко всем айпишникам. Например у нас есть множество серверов и на каждом по крайней мере 32 айпишника и по несколько сетевых интерфейсов. Есть сервисы, работающие на 80 порту и есть необходимость запускать IIS тоже на 80 порту. Соответственно, нужно развести сервисы и IIS строго по определённым IP адресам.

    Чтобы выполнить такую задачу, необходимо перечислисть все айпишники на машине и связать каждое приложение с определённым адресом в зависимости от существующей маршрутизации для каждой подсети. Однако пул сокетов в IIS по умолчанию захватывает ВСЕ IP адреса на локальной машине. Поэтому, чтобы привязать новый сервис к определённому айпишнику, необходимо сперва отключить в IIS пул сокетов. Можно привести другой пример необходимости получения списка IP адресов, когда в локальном копьютере установлено две сетвых карты (одна смотрит в интернет, а другая - в локальную сеть) и необходимо чтобы Ваше приложение слушало сокет только на сетевом интерфейсе, подключённом к интернету.

    В любом случае, существует стандартный подход перечисления всех локальных IP-адресов. Ниже приведён пример иллюстрирующий это на C#:
    PHP:
    using System;
    using System.Net;
    namespace 
    GetIPCS
    {
    /// <summary>
    /// Получаем IP адреса локальной машины
    /// </summary>
    class classGetIPCS
    {
      
    /// <summary>
      /// Получаем IP адреса локальной машины
      /// </summary>
      
    [STAThread]
      static 
    void Main(string[] args)
      {
       
    // Получаем имя компьютера
       
    String strHostName Dns.GetHostName();
       
    Console.WriteLine("Host Name: " strHostName);
       
    // Ищем хост по имени
       
    IPHostEntry iphostentry Dns.GetHostByName(strHostName);
       
    // Перечисляем IP адреса
       
    int nIP 0;
       foreach(
    IPAddress ipaddress in iphostentry.AddressList)
       {
        
    Console.WriteLine("IP #" + ++nIP ": " +
                          
    ipaddress.ToString());
       }
      }
    }
    }
    Скачать демо-проект и исходник - 5,55 кб(кликай)