Проблема с определением МАС адреса
От: Bonderas  
Дата: 22.09.05 08:52
Оценка:
Доброго времени суток, уважаемые!

Возникла такая вот проблема...
Есть промышленный компьютер, на котором имеется материнка с 2мя сетевыми адаптерами.
Необходимо определить МАС адреса этих адаптеров и их IP.
Для этого использую 2 нижеприведенных функции:

//IP
char* CompIP(int nAdapter)
{
WSADATA wsaData;
AnsiString IP;
struct sockaddr_in adr;
if (!WSAStartup(MAKEWORD(2,2), &wsaData))
{
char chInfo[128];
if (!gethostname(chInfo,sizeof(chInfo)))
{
hostent *sh;
sh=gethostbyname((char*)&chInfo);
if (sh!=NULL)
{
if(sh->h_addr_list[nAdapter])
{
memcpy(&adr.sin_addr,sh->h_addr_list[nAdapter],sh->h_length);
}
}
}
}
else
{
WSACleanup();
return "Winsock Error!";
}
WSACleanup();
return (inet_ntoa(adr.sin_addr));
}

//---------------------------------------------------------------------------
//MAC
char* CompMAC(UCHAR num_plat)
{

NCB Ncb;
UCHAR uRetCode;

memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = num_plat;

uRetCode = Netbios( &Ncb );

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

strcpy( (char *)Ncb.ncb_callname, "* " );
(char *)Ncb.ncb_buffer = (char *) &Adapter;
Ncb.ncb_length = sizeof(Adapter);

uRetCode = Netbios( &Ncb );

char* answer = new char[17];

if ( uRetCode == 0 )
{
strcpy(answer,(AnsiString(IntToHex(Adapter.adapt.adapter_address[0],2))+":"+
AnsiString(IntToHex(Adapter.adapt.adapter_address[1],2))+":"+
AnsiString(IntToHex(Adapter.adapt.adapter_address[2],2))+":"+
AnsiString(IntToHex(Adapter.adapt.adapter_address[3],2))+":"+
AnsiString(IntToHex(Adapter.adapt.adapter_address[4],2))+":"+
AnsiString(IntToHex(Adapter.adapt.adapter_address[5],2))).c_str());
}
else
{
strcpy(answer,(AnsiString("Error: ")+IntToStr((unsigned int)uRetCode)).c_str());
}

return answer;
}

соответсвенно вызываю как

CompIP2(0);
CompIP2(1);

CompMAC(0);
CompMAC(1);

C IP проблем не возникает и возвращается все как и положено, а вот со вторым МАСом возникает проблема — возвращается 35 ошибка...

В чем могут быть грабли?

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.