Здравствуйте sensimon, Вы писали:
S>Как узнать ip-адреса всех компьютеров локальной сети/рабочей группы/домена
А в чем проблема? Оперделяешь имена компьютеров, которые находятся в конкретной раб. группе или домене и символьное имя преобразуешь в IP, используя функцию gethostbyname ()? Уточни, если тебе надо более конкретная информация.
привет!
я получаю список имен компов с помошью NetServerEnum, далее пытаюсь получить список их айпишников. сначала пробовал getaddrinfo, работало не стабильно, но хоть как-то работало. потом какому-то гению приспичило назвать свой комп по русски. здесь getaddrinfo кончился, в силу невозможности сконвертить локализованное имя в char*. (NetServerEnum нормально обрабатывает это имя).
отсюда вопрос, можно ли каким-нить способом получить айпишник по имени?
думаю, что возможно всего 2 варианта распределения ip адресов — статический и динамический. в статическом случае, я могу средствами NetBios получить айпишник по имени. все будет хорошо, т.к все айпишники статические. динамический случай посложнее, там таблица соответствия имени и адреса во-первых лежит на каком-то сервере(наверное, какая-нить служба рассылает эту таблицу на машины?) и, наверняка, т.к. процесс динамический, существуют невалидные записи, т.е. одному айпи соотв. несколько имен. это так?
получается, что NetServerEnum либо юзает какой-то экземпляр таблицы, должна иметь доступ и к имени и к айпишнику... но у меня не получается найти способ, которым я мог бы получить айпишник для юникодного имени.
спасибо!
Здравствуйте, Pzz, Вы писали:
Pzz>Правильный ответ — никак. Для этого не существует никакого надежного механизма.
Это действительно так. Мне хочется дать небольшое пояснение для sensimonu.
NetServerEnum использует "master browser" — компютер в сети, который через NetBIOS (т.е. через широковещательные запросы) собирает и раздает имена компютеров. При этом еше могут проходить "выборы", т.к. "прибить" master browser к конкретному серверу — невозможно.
За работу всего этого отвечает сервис "Обозреватель компьютеров" (в русском варианте, по английски, кажется, Computer Browser?). Этот сервис может быть отключен — при чем MS настоятельно рекомендует это делать на всех комютерах для повышения безопасности сети. Смысл в том, что никому, кроме администраторов, не нужно знать имена компютеров в сети, пользователм сообщаются имена только нужных им ресурсов (публичные ресурсы можно, например, публиковать в AD)
Кроме того, NetServerEnum (как я уже говорил) использует широковещательные запросы NetBios — и тут есть три момента:
1) NetBios может быть выключен
2) Широковещательные запросы влияют на производительность сети
3) Широковещательные запросы работают только в одном сегменте сети — если у нас две подсети и маршрутизатор, то мы будем "видеть" только соcедей
С другой стороны, в рабочей группе из 10 машин NetServerEnum будет в принципе нормально работать (а в большой сети с маршрутизаторами не будет работать никогда)
Здравствуйте, Модуль Оверлеев, Вы писали:
МО>привет! МО>я получаю список имен компов с помошью NetServerEnum, далее пытаюсь получить список их айпишников. сначала пробовал getaddrinfo, работало не стабильно, но хоть как-то работало. потом какому-то гению приспичило назвать свой комп по русски. здесь getaddrinfo кончился, в силу невозможности сконвертить локализованное имя в char*. (NetServerEnum нормально обрабатывает это имя). МО>отсюда вопрос, можно ли каким-нить способом получить айпишник по имени?
МО>думаю, что возможно всего 2 варианта распределения ip адресов — статический и динамический. в статическом случае, я могу средствами NetBios получить айпишник по имени. все будет хорошо, т.к все айпишники статические. динамический случай посложнее, там таблица соответствия имени и адреса во-первых лежит на каком-то сервере(наверное, какая-нить служба рассылает эту таблицу на машины?) и, наверняка, т.к. процесс динамический, существуют невалидные записи, т.е. одному айпи соотв. несколько имен. это так?
МО>получается, что NetServerEnum либо юзает какой-то экземпляр таблицы, должна иметь доступ и к имени и к айпишнику... но у меня не получается найти способ, которым я мог бы получить айпишник для юникодного имени. МО>спасибо!
Здравствуйте, Модуль Оверлеев, Вы писали:
> там таблица соответствия имени и адреса во-первых лежит на каком-то сервере(наверное, какая-нить служба рассылает эту таблицу на машины?)
Эта служба называется DNS. В общем случае простой клиент не сможет получить _ВСЕ_ записи это таблицы, только информация ИМЯ-IP (или IP->ИМЯ)
> и, наверняка, т.к. процесс динамический, существуют невалидные записи, т.е. одному айпи соотв. несколько имен. это так?
Это не так — при динамической настроке клиетов (это делает DHCP-сервер) один IP не получит разные имена. Хотя разные имена для одного IP в DNS вполне допустимая вещь — это может настрить администратор (например, www.qq.com и ftp.qq.com насамом деле могут указывать на server1.qq.com)
Здравствуйте, aloch, Вы писали:
Pzz>>Правильный ответ — никак. Для этого не существует никакого надежного механизма. A>Это действительно так. Мне хочется дать небольшое пояснение для sensimonu.
И еще 5 копеек. Совсем необязательно что компьютеры в сети имеют именно IP-адреса. Может быть IPv6. Раньше могли быть, например, NetBEUI или IPX. Завтра могут быть другие типы транспортных протоколов.
Здравствуйте, oziro, Вы писали:
O>Вот из-за таких консерваторов уже 10 лет IPv6 не может победить!
безусловно то, что мои познания в TCP/IP поверхностны. но никак не могу понять, зачем вообще нужен этот адрес? имхо, на уже на этом этапе развития техники можно уйти от дуализма адреса и имени, извините за уход от темы.
Здравствуйте, Модуль Оверлеев, Вы писали:
МО>безусловно то, что мои познания в TCP/IP поверхностны. но никак не могу понять, зачем вообще нужен этот адрес? имхо, на уже на этом этапе развития техники можно уйти от дуализма адреса и имени, извините за уход от темы.
Каким образом? Оставив только имена? Или только адреса? Первое не подходит маршрутизаторам, второе — людям.
Здравствуйте, Модуль Оверлеев, Вы писали:
МО>безусловно то, что мои познания в TCP/IP поверхностны. но никак не могу понять, зачем вообще нужен этот адрес? имхо, на уже на этом этапе развития техники можно уйти от дуализма адреса и имени, извините за уход от темы.
Этот дуализм очень важен. Например, это позволяет за одним именем закрепить несколько адресов (ведь когда мы переходим, например, на www.google.com, мы ведь все вместе не к одному физическому компютеру подулючаемся), или наоборот, с разными именами связать один адрес (например, www.mycoolserver.com и ftp.mycoolserver.com)