Тема хотя и старая, но видимо актуальная. Я сам хотел продублировать этот вопрос, но успел найти решение. 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"