1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <strstream>
#include <string>
//---------------------------------------------------------------------------
bool TGestionFrm::GetAdapterInfo(int nAdapterNum, string & sMAC)
{
NCB Ncb;
memset(&Ncb, 0, sizeof(Ncb));
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = nAdapterNum;
if (Netbios(&Ncb) != NRC_GOODRET)
{
char acTemp[80];
ostrstream outs(acTemp, sizeof(acTemp));
outs << "error " << Ncb.ncb_retcode << " on reset" << ends;
sMAC = acTemp;
return false;
}
memset(&Ncb, 0, sizeof(Ncb));
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = nAdapterNum;
strcpy((char *) Ncb.ncb_callname, "*");
struct ASTAT
{ ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[30];
}Adapter;
memset(&Adapter, 0, sizeof(Adapter));
Ncb.ncb_buffer = (unsigned char *)&Adapter;
Ncb.ncb_length = sizeof(Adapter);
if (Netbios(&Ncb) == 0)
{
char acMAC[18];
sprintf(acMAC, "%02X %02X %02X %02X %02X %02X",
int (Adapter.adapt.adapter_address[0]),
int (Adapter.adapt.adapter_address[1]),
int (Adapter.adapt.adapter_address[2]),
int (Adapter.adapt.adapter_address[3]),
int (Adapter.adapt.adapter_address[4]),
int (Adapter.adapt.adapter_address[5]));
sMAC = acMAC;
return true;
}
else
{
char acTemp[80];
ostrstream outs(acTemp, sizeof(acTemp));
outs << "error " << Ncb.ncb_retcode << " on ASTAT" << ends;
sMAC = acTemp;
return false;
}
}
//------------------------------------------------------
void __fastcall TGestionFrm::Button1Click(TObject *Sender)
{
using namespace std;
//========= C++ Code : BEGIN =========
LANA_ENUM AdapterList;
NCB Ncb;
memset(&Ncb, 0, sizeof(NCB));
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (unsigned char *)&AdapterList;
Ncb.ncb_length = sizeof(AdapterList);
Netbios(&Ncb);
string sMAC;
cout << "MY INFO : AdapterList.length = " << static_cast<int>(AdapterList.length) << endl;
ShowMessage(AdapterList.length); //====> retourne 0 !!!
for (int i = 0; i < AdapterList.length; ++i)
{
if (GetAdapterInfo(AdapterList.lana[i], sMAC))
{
ListBox1->Items->Add(sMAC.c_str());
cout << "Adapter " << int (AdapterList.lana[i]) << "'s MAC is " <<
sMAC << endl;
}
else
{
cerr << "Failed to get MAC address! Do you" << endl;
cerr << "have the NetBIOS protocol installed?" << endl;
break;
}
}
//return 0;
}
//--------------------------------------------------------------------------- |
Partager