1 2 // LocalHostInfo.cpp文件 3 4 #include <windows.h> 5 #include <stdio.h> 6 7 #include "Iphlpapi.h" 8 #pragma comment(lib, "Iphlpapi.lib") 9 #pragma comment(lib, "WS2_32.lib") 10 BOOL IsLocalAdapter(char *pAdapterName); 11 ///// 12 // 全局数据 13 u_char g_ucLocalMac[6]; // 本地MAC地址 14 DWORD g_dwGatewayIP; // 网关IP地址 15 DWORD g_dwLocalIP; // 本地IP地址 16 DWORD g_dwMask; // 子网掩码 17 18 BOOL GetGlobalData() 19 { 20 PIP_ADAPTER_INFO pAdapterInfo = NULL; 21 ULONG ulLen = 0; 22 23 // 为适配器结构申请内存 24 ::GetAdaptersInfo(pAdapterInfo,&ulLen); 25 pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR, ulLen); 26 27 // 取得本地适配器结构信息 28 if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS) 29 { 30 if(pAdapterInfo != NULL) 31 { 32 memcpy(g_ucLocalMac, pAdapterInfo->Address, 6); 33 g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String); 34 g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String); 35 g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String); 36 } 37 } 38 39 printf(" \n -------------------- 本地主机信息 -----------------------\n\n"); 40 in_addr in; 41 in.S_un.S_addr = g_dwLocalIP; 42 printf(" IP Address : %s \n", ::inet_ntoa(in)); 43 44 in.S_un.S_addr = g_dwMask; 45 printf(" Subnet Mask : %s \n", ::inet_ntoa(in)); 46 47 in.S_un.S_addr = g_dwGatewayIP; 48 printf(" Default Gateway : %s \n", ::inet_ntoa(in)); 49 50 u_char *p = g_ucLocalMac; 51 printf(" MAC Address : %02X-%02X-%02X-%02X-%02X-%02X \n", p[0], p[1], p[2], p[3], p[4], p[5]); 52 53 printf(" \n \n "); 54 55 return TRUE; 56 } 57 void GetLocalMAC(char *buf) 58 { 59 IP_ADAPTER_INFO *IpAdaptersInfo =NULL; 60 IP_ADAPTER_INFO *IpAdaptersInfoHead =NULL; 61 62 IpAdaptersInfo = (IP_ADAPTER_INFO *) GlobalAlloc(GPTR, sizeof(IP_ADAPTER_INFO )); 63 64 if (IpAdaptersInfo == NULL) 65 { 66 return; 67 } 68 69 DWORD dwDataSize = sizeof( IP_ADAPTER_INFO ); 70 DWORD dwRetVal = GetAdaptersInfo(IpAdaptersInfo,&dwDataSize); 71 72 if ( ERROR_SUCCESS != dwRetVal) 73 { 74 GlobalFree( IpAdaptersInfo ); 75 IpAdaptersInfo = NULL; 76 77 if( ERROR_BUFFER_OVERFLOW == dwRetVal) 78 { 79 IpAdaptersInfo =(IP_ADAPTER_INFO *) GlobalAlloc( GPTR, dwDataSize ); 80 if(IpAdaptersInfo != NULL) 81 { 82 memcpy(g_ucLocalMac, IpAdaptersInfo->Address, 6); 83 g_dwGatewayIP = ::inet_addr(IpAdaptersInfo->GatewayList.IpAddress.String); 84 g_dwLocalIP = ::inet_addr(IpAdaptersInfo->IpAddressList.IpAddress.String); 85 g_dwMask = ::inet_addr(IpAdaptersInfo->IpAddressList.IpMask.String); 86 } 87 if ( ERROR_SUCCESS != GetAdaptersInfo( IpAdaptersInfo, &dwDataSize )) 88 { 89 GlobalFree( IpAdaptersInfo ); 90 return; 91 } 92 93 } 94 else 95 { 96 return; 97 } 98 99 } 100 printf(" \n -------------------- 本地主机信息 -----------------------\n\n"); 101 in_addr in; 102 in.S_un.S_addr = g_dwLocalIP; 103 printf(" IP Address : %s \n", ::inet_ntoa(in)); 104 105 in.S_un.S_addr = g_dwMask; 106 printf(" Subnet Mask : %s \n", ::inet_ntoa(in)); 107 108 in.S_un.S_addr = g_dwGatewayIP; 109 printf(" Default Gateway : %s \n", ::inet_ntoa(in)); 110 111 u_char *p1 = g_ucLocalMac; 112 printf(" MAC Address : %02X-%02X-%02X-%02X-%02X-%02X \n", p1[0], p1[1], p1[2], p1[3], p1[4], p1[5]); 113 114 printf(" \n \n "); 115 //Save the head pointer of IP_ADAPTER_INFO structures list. 116 IpAdaptersInfoHead = IpAdaptersInfo; 117 118 do{ 119 if (IsLocalAdapter(IpAdaptersInfo->AdapterName)) 120 { 121 sprintf(buf,"%02x-%02x-%02x-%02x-%02x-%02x", 122 IpAdaptersInfo->Address[0], 123 IpAdaptersInfo->Address[1], 124 IpAdaptersInfo->Address[2], 125 IpAdaptersInfo->Address[3], 126 IpAdaptersInfo->Address[4], 127 IpAdaptersInfo->Address[5]); 128 // 129 break; 130 } 131 132 IpAdaptersInfo = IpAdaptersInfo->Next; 133 134 }while (IpAdaptersInfo); 135 136 if (IpAdaptersInfoHead != NULL) 137 { 138 GlobalFree( IpAdaptersInfoHead ); 139 } 140 g_dwGatewayIP = ::inet_addr(IpAdaptersInfo->GatewayList.IpAddress.String); 141 g_dwLocalIP = ::inet_addr(IpAdaptersInfo->IpAddressList.IpAddress.String); 142 g_dwMask = ::inet_addr(IpAdaptersInfo->IpAddressList.IpMask.String); 143 144 printf(" \n -------------------- 本地主机信息 -----------------------\n\n"); 145 146 in.S_un.S_addr = g_dwLocalIP; 147 printf(" IP Address : %s \n", ::inet_ntoa(in)); 148 149 in.S_un.S_addr = g_dwMask; 150 printf(" Subnet Mask : %s \n", ::inet_ntoa(in)); 151 152 in.S_un.S_addr = g_dwGatewayIP; 153 printf(" Default Gateway : %s \n", ::inet_ntoa(in)); 154 155 u_char *p2 = g_ucLocalMac; 156 printf(" MAC Address : %02X-%02X-%02X-%02X-%02X-%02X \n", p2[0], p2[1], p2[2], p2[3], p2[4], p2[5]); 157 158 printf(" \n \n "); 159 } 160 161 162 BOOL IsLocalAdapter(char *pAdapterName) 163 { 164 BOOL ret_value = FALSE; 165 166 #define NET_CARD_KEY TEXT("System\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}") 167 char szDataBuf[MAX_PATH+1]; 168 DWORD dwDataLen = MAX_PATH; 169 DWORD dwType = REG_SZ; 170 HKEY hNetKey = NULL; 171 HKEY hLocalNet = NULL; 172 173 if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, NET_CARD_KEY, 0, KEY_READ, &hNetKey)) 174 return FALSE; 175 wsprintf(szDataBuf, "%s\\Connection", pAdapterName); 176 if(ERROR_SUCCESS != RegOpenKeyEx(hNetKey ,szDataBuf ,0 ,KEY_READ, &hLocalNet)) 177 { 178 RegCloseKey(hNetKey); 179 return FALSE; 180 } 181 if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, "MediaSubType", 0, &dwType, (BYTE *)szDataBuf, &dwDataLen)) 182 { 183 goto ret; 184 } 185 if (*((DWORD *)szDataBuf)!=0x01) 186 goto ret; 187 dwDataLen = MAX_PATH; 188 if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, "PnpInstanceID", 0, &dwType, (BYTE *)szDataBuf, &dwDataLen)) 189 { 190 goto ret; 191 } 192 if (strncmp(szDataBuf, "PCI", strlen("PCI"))) 193 goto ret; 194 195 ret_value = TRUE; 196 197 ret: 198 RegCloseKey(hLocalNet); 199 RegCloseKey(hNetKey); 200 201 return ret_value; 202 } 203 int main() 204 { 205 // 获取全局数据 206 GetGlobalData(); 207 char * aa=(char *) malloc (sizeof(char)*100); 208 GetLocalMAC(aa); 209 wprintf(L"%s",aa); 210 getchar(); 211 return 0; 212 }
转载于:https://www.cnblogs.com/long735/archive/2012/05/03/2481411.html