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