64,647
社区成员
发帖
与我相关
我的任务
分享
#ifdef WIN32
#pragma comment (lib,"netapi32.lib")
#define MAX_MAC_COUNT 6
#define MAX_ADAPTER_NAME_COUNT 30
static inline void GetMAC(char* mac)
{
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[MAX_ADAPTER_NAME_COUNT];
} ASTAT, * PASTAT;
ASTAT Adapter;
typedef struct _LANA_ENUM
{
UCHAR length;
UCHAR lana[MAX_LANA];
} LANA_ENUM ;
LANA_ENUM lana_enum;
NCB ncb;
int uRetCode;
memset(mac,0, MAX_MAC_COUNT);
memset( &ncb, 0, sizeof(ncb) );
memset( &lana_enum, 0, sizeof(lana_enum));
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char *) &lana_enum;
ncb.ncb_length = sizeof(LANA_ENUM);
uRetCode = Netbios( &ncb );
if( uRetCode != NRC_GOODRET ) return;
for( int lana=0; lana<lana_enum.length; lana++ )
{
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_enum.lana[lana];
uRetCode = Netbios( &ncb );
if( uRetCode == NRC_GOODRET ) break;
}
if( uRetCode != NRC_GOODRET ) return;
memset( &ncb, 0, sizeof(ncb) );
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_enum.lana[0];
strcpy( (char* )ncb.ncb_callname, "*" );
ncb.ncb_buffer = (unsigned char *) &Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( &ncb );
if( uRetCode != NRC_GOODRET ) return;
memcpy(mac,Adapter.adapt.adapter_address, MAX_MAC_COUNT);
}
static inline std::string GetMAC()
{
unsigned char szBuf[MAX_MAC_COUNT] = {0};
char szMac[4 * MAX_MAC_COUNT] = {0};
GetMAC((char*)szBuf);
sprintf(szMac, "%02X-%02X-%02X-%02X-%02X-%02X", szBuf[0], szBuf[1], szBuf[2], szBuf[3], szBuf[4], szBuf[5]);
return szMac;
}
#endif
static inline std::string GetIP( const std::string &strInput )
{
struct hostent *host = NULL;
if((host = gethostbyname(strInput.c_str())) == NULL)
{
return "";
}
return inet_ntoa(*((struct in_addr*)(host->h_addr)));
}