Если вы столкнулись с проблемой и хотите поделиться своим опытом, знаниями или у вас есть интересная статья с иностранного сайта, предложение новой темы, статью которую Вы хотите видеть в ближайшем будущем, расскажите нам об этом и мы обязательно поделимся этими знаниями со всеми. Возможно, для других ваши знания, опыт и советы окажутся очень ценными и помогут вовремя найти правильный выход или не совершить ошибок. Так же если у вас есть предложение о сотрудничестве, пожелания, указать на нарушения сайта или просто сказать слова благодарности, все это вы можете сделать через форму обратной связи. Читать дальше
Зачем может понадобиться узнать 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());
}
}
}
}
Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!