Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение NetBIOS имени по IP адресу  (Прочитано 7567 раз)
0 Пользователей и 1 Гость смотрят эту тему.
helpme
Гость
« : 19-08-2004 09:42 » 

Подскажите плз, как лучше реализовать сабж? В msdn есть один пример, который в общем-то выполняет схожую задачу, но какой-то он уж слишком громоздкий Улыбаюсь Может быть существует лучший способ?
Записан
SaiborEye
Гость
« Ответ #1 : 29-09-2008 07:43 » 

Тема хотя и старая, но видимо актуальная. Я сам хотел продублировать этот вопрос, но успел найти решение. Netbios() дает возможность сразу получить и имя компа и MAC-адрес сетевой карты по заданному IP (в том числе и удаленному).
Код:
#include <Nb30.h>

.................................................

typedef struct _ASTAT_
{
    ADAPTER_STATUS adapt;
    NAME_BUFFER    NameBuff [255];
}ASTAT, * PASTAT;

ASTAT Adapter;

.................................................

NCB ncb;
UCHAR uRetCode;
    memset( &ncb, 0, sizeof(ncb) );
    ncb.ncb_command = NCBRESET;
    ncb.ncb_lana_num = 0;

    uRetCode = Netbios( &ncb );
    printf( "The NCBRESET return code is: 0x%x \n", uRetCode );// Результат сброса

    memset( &ncb, 0, sizeof(ncb) );
    ncb.ncb_command = NCBASTAT;
    ncb.ncb_lana_num = 0;

    strcpy( (LPSTR)ncb.ncb_callname, "192.168.1.100");// Здесь задаем IP адрес !
    ncb.ncb_buffer = (PUCHAR)(char *) &Adapter;
    ncb.ncb_length = sizeof(Adapter);

    uRetCode = Netbios( &ncb );

После выполнения последней функции, MAC-адрес содержится в 6-ти байтах структуры "adapt" Adapter.adapt.adapter_address[0...5], а имя - в массиве структур "NameBuff" Adapter.NameBuff[0...n].name, где "name" - символьная строка. В моих экспериментах, первый элемент массива обычно содержит имя компьютера, второй - рабочей группы, остальные 253 обычно забиты мусором. Фрагмент выдернут из работоспособного приложения, только не забудьте при создании проекта прикрепить библиотеку "Netapi32.lib"
« Последнее редактирование: 29-09-2008 07:45 от SaiborEye » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines