#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <httpext.h>
#include <windef.h>
#include <Nb30.h> 
#pragma comment(lib, "ws2_32.lib ")
#pragma comment(lib, "netapi32.lib ") 
void CheckIP(void) 
...{
WSADATA wsaData;
char name[155];
char *ip;
PHOSTENT hostinfo;
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 ) 
...{
if( gethostname ( name, sizeof(name)) == 0) 
...{
if((hostinfo = gethostbyname(name)) != NULL) 
...{
ip = inet_ntoa (*(struct in_addr *)*hostinfo-> h_addr_list);
printf( " IP地址: %s ",ip);
}
}
WSACleanup( );
}
} 
int getMAC(char * mac) 
...{
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 uRetCode;
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 uRetCode;
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 uRetCode;
sprintf(mac, "%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;
} 
int main(void) 
...{
CheckIP();
char mac[200];
getMAC(mac);
printf( " mac地址 : %s ",mac);
return 0;
}
本文介绍了一种通过C语言程序获取本地计算机IP地址和MAC地址的方法。程序首先启动Winsock,然后通过gethostname和gethostbyname函数获得IP地址,接着使用NetBIOS API调用获取MAC地址。
593

被折叠的 条评论
为什么被折叠?



