1 #include <windows.h> 2 #include <stdio.h> 3 #include "Iphlpapi.h" //包含对IP帮助函数的定义 4 #pragma comment(lib,"Iphlpapi.lib") 5 #pragma comment(lib,"WS2_32.lib")//全局数据 6 u_char g_ucLocalMac[6]; 7 DWORD g_dwGatewayIP; 8 DWORD g_dwLocalIP; 9 DWORD g_dwMask; 10 BOOL GetGlobalData() 11 { 12 PIP_ADAPTER_INFO pAdapterInfo = NULL; 13 ULONG ulLen = 0; 14 //为适配器结构申请内存 15 ::GetAdaptersInfo(pAdapterInfo,&ulLen); 16 pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,ulLen); 17 //取得本地适配器结构信息 18 if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS) 19 { 20 if(pAdapterInfo != NULL) 21 { 22 memcpy(g_ucLocalMac,pAdapterInfo->Address,6); 23 g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String); 24 g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String); 25 g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String); 26 } 27 } 28 29 printf("\n ---------------------本地主机信息---------------------\n\n"); 30 in_addr in; 31 in.S_un.S_addr = g_dwLocalIP; 32 printf(" IP Address : %s\n",::inet_ntoa(in)); 33 34 in.S_un.S_addr = g_dwMask; 35 printf(" Subnet Mask : %s\n",::inet_ntoa(in)); 36 37 in.S_un.S_addr = g_dwGatewayIP; 38 printf(" Default Gateway:%s\n",::inet_ntoa(in)); 39 40 u_char *p = g_ucLocalMac; 41 printf(" MAC Address:%02X-%02X-%02X-%02X-%02X-%02X\n",p[0],p[1],p[2],p[3],p[4],p[5]); 42 43 printf("\n\n"); 44 45 return TRUE; 46 }
主要使用帮助函数GetAdapterInfo即可。
VS成功实例:
1 // getMac.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <windows.h> 6 #include <stdio.h> 7 #include "Iphlpapi.h" //包含对IP帮助函数的定义 8 #pragma comment(lib,"Iphlpapi.lib") 9 #pragma comment(lib,"WS2_32.lib")//全局数据 10 u_char g_ucLocalMac[6]; 11 DWORD g_dwGatewayIP; 12 DWORD g_dwLocalIP; 13 DWORD g_dwMask; 14 BOOL GetGlobalData() 15 { 16 PIP_ADAPTER_INFO pAdapterInfo = NULL; 17 ULONG ulLen = 0; 18 //为适配器结构申请内存 19 ::GetAdaptersInfo(pAdapterInfo,&ulLen); 20 pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,ulLen); 21 //取得本地适配器结构信息 22 if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS) 23 { 24 if(pAdapterInfo != NULL) 25 { 26 memcpy(g_ucLocalMac,pAdapterInfo->Address,6); 27 g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String); 28 g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String); 29 g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String); 30 } 31 } 32 33 printf("\n ---------------------本地主机信息---------------------\n\n"); 34 in_addr in; 35 in.S_un.S_addr = g_dwLocalIP; 36 printf(" IP Address : %s\n",::inet_ntoa(in)); 37 38 in.S_un.S_addr = g_dwMask; 39 printf(" Subnet Mask : %s\n",::inet_ntoa(in)); 40 41 in.S_un.S_addr = g_dwGatewayIP; 42 printf(" Default Gateway:%s\n",::inet_ntoa(in)); 43 44 u_char *p = g_ucLocalMac; 45 printf(" MAC Address:%02X-%02X-%02X-%02X-%02X-%02X\n",p[0],p[1],p[2],p[3],p[4],p[5]); 46 47 printf("\n\n"); 48 49 return TRUE; 50 } 51 52 int _tmain(int argc, _TCHAR* argv[]) 53 { 54 GetGlobalData(); 55 return 0; 56 }
结果如下: