//需要连接Netapi32.lib
#include"winsock2.h"
#pragma comment(lib,"ws2_32.lib")
#include <Nb30.h>
//内网IP
int GetIPAddr(char *IpAddr)
{
WSAData wsaData;
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
{
return 1;
}
char host_name[225];
if (gethostname(host_name, sizeof(host_name)) == SOCKET_ERROR)
{
return 2;
}
struct hostent *phe = gethostbyname(host_name);
if (phe == 0)
{
return 3;
}
for (int i=0; phe->h_addr_list[i]!=0; ++i)
{
struct in_addr addr;
memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
if (strlen(IpAddr) > 0)
strcat(IpAddr, "*_*");
strcat(IpAddr, inet_ntoa(addr));
}
WSACleanup();
return 0;
}
//网卡MAC
int GetMACAddr(char *MACAddr)
{
try
{
NCB ncb;
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, *PASTAT;
ASTAT Adapter;
typedef struct _LANA_ENUM
{
UCHAR length;
UCHAR lana[MAX_LANA];
}LANA_ENUM;
LANA_ENUM lana_enum;
UCHAR uRetCode;
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 1;
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 2;
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 3;
sprintf(MACAddr, "%02X-%02X-%02X-%02X-%02X-%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]);
return 0;
}
catch (...)
{
return -1;
}
}
//CPU ID
int GetCPUID(char *CpuId)
{
try
{
unsigned long s1,s2,s3,s4;
unsigned char vendor_id[]= "------------ ";
__asm
{
xor eax,eax
cpuid
mov dword ptr vendor_id,ebx
mov dword ptr vendor_id[+4],edx
mov dword ptr vendor_id[+8],ecx
}
__asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
__asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s3,edx
mov s4,ecx
}
sprintf(CpuId, "%08X%08X", s1, s2);
return 0;
}
catch (...)
{
return -1;
}
}