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

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


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

      В любом случае, существует стандартный подход перечисления всех локальных IP-адресов. Ниже приведён пример иллюстрирующий это на C#:

using System;
using System.Net;
 
namespace GetIPCS
{
   /// 
   /// Получаем IP адреса локальной машины
   /// 
   class classGetIPCS
   {
      /// 
      /// Получаем IP адреса локальной машины
      /// 
      [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());
         }
      }
   }
}

Источник sources.ru



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

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!