C语言实现Windows下获取IP和MAC地址。
C语言实现Windows下获取IP和MAC地址。
1 #include <winsock2.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <httpext.h> 6 #include <windef.h> 7 #include <Nb30.h> 8 #pragma comment(lib,"ws2_32.lib") 9 #pragma comment(lib,"netapi32.lib") 10 void CheckIP(void) 11 { 12 WSADATA wsaData; 13 char name[155]; 14 char *ip; 15 PHOSTENT hostinfo; 16 if (WSAStartup(MAKEWORD(2, 0), &wsaData) == 0) 17 { 18 if (gethostname(name, sizeof(name)) == 0) 19 { 20 if ((hostinfo = gethostbyname(name)) != NULL) 21 { 22 ip = inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list); 23 printf(" IP地址: %s ", ip); 24 } 25 } 26 WSACleanup(); 27 } 28 } 29 int getMAC(char * mac) 30 { 31 NCB ncb; 32 typedef struct _ASTAT_ 33 { 34 ADAPTER_STATUS adapt; 35 NAME_BUFFER NameBuff[30]; 36 }ASTAT, *PASTAT; 37 38 ASTAT Adapter; 39 typedef struct _LANA_ENUM 40 { 41 UCHAR length; 42 UCHAR lana[MAX_LANA]; 43 }LANA_ENUM; 44 LANA_ENUM lana_enum; 45 UCHAR uRetCode; 46 memset(&ncb, 0, sizeof(ncb)); 47 memset(&lana_enum, 0, sizeof(lana_enum)); 48 49 ncb.ncb_command = NCBENUM; 50 ncb.ncb_buffer = (unsigned char *)&lana_enum; 51 ncb.ncb_length = sizeof(LANA_ENUM); 52 uRetCode = Netbios(&ncb); 53 if (uRetCode != NRC_GOODRET) 54 return uRetCode; 55 56 for (int lana = 0; lana<lana_enum.length; lana++) 57 { 58 ncb.ncb_command = NCBRESET; 59 ncb.ncb_lana_num = lana_enum.lana[lana]; 60 uRetCode = Netbios(&ncb); 61 if (uRetCode == NRC_GOODRET) 62 break; 63 } 64 if (uRetCode != NRC_GOODRET) 65 return uRetCode; 66 67 memset(&ncb, 0, sizeof(ncb)); 68 ncb.ncb_command = NCBASTAT; 69 ncb.ncb_lana_num = lana_enum.lana[0]; 70 strcpy_s((char*)ncb.ncb_callname,5, "*"); 71 ncb.ncb_buffer = (unsigned char *)&Adapter; 72 ncb.ncb_length = sizeof(Adapter); 73 uRetCode = Netbios(&ncb); 74 if (uRetCode != NRC_GOODRET) 75 return uRetCode; 76 sprintf_s(mac,18, "%02X-%02X-%02X-%02X-%02X-%02X", 77 Adapter.adapt.adapter_address[0], 78 Adapter.adapt.adapter_address[1], 79 Adapter.adapt.adapter_address[2], 80 Adapter.adapt.adapter_address[3], 81 Adapter.adapt.adapter_address[4], 82 Adapter.adapt.adapter_address[5] 83 ); 84 return 0; 85 } 86 int main(void) 87 { 88 CheckIP(); 89 char mac[200]; 90 getMAC(mac); 91 printf(" mac地址 : %s ", mac); 92 getchar(); 93 return 0; 94 }