获取本机IP地址,网络(内部LAN)的子网掩码,网管的ip地址和本机的MAC地址

  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 }

posted on 2012-05-03 21:50  long735  阅读(615)  评论(0编辑  收藏  举报

导航