看书学习,温故而知新,存档备用。
#include <WinSock2.h>
#pragma comment(lib,"WS2_32.lib")
#include "iphlpapi.h"
#pragma comment(lib,"iphlpapi.lib")
int GetAdaptersInfomation()
{
PIP_ADAPTER_INFO pAdapterInfo;
ULONG sizePointer=sizeof(IP_ADAPTER_INFO);
DWORD res;
pAdapterInfo=(PIP_ADAPTER_INFO)malloc(sizePointer);
//1
res=GetAdaptersInfo(pAdapterInfo,&sizePointer);
if (ERROR_SUCCESS!=res)
{
while(ERROR_BUFFER_OVERFLOW==res)
{
free(pAdapterInfo);
pAdapterInfo=(PIP_ADAPTER_INFO)malloc(sizePointer);
res=GetAdaptersInfo(pAdapterInfo,&sizePointer);
}
if (ERROR_SUCCESS!=res)
{
printf("GetAdaptersInfo fail!\r\n");
if(NULL!=pAdapterInfo){free(pAdapterInfo);}
return -1;
}
}
//2
PIP_ADAPTER_INFO pTempInfo;
pTempInfo=pAdapterInfo;
int count=0;
while(NULL!=pTempInfo)
{
printf("Adapter(%d):\r\n",count);
printf(" Name:%s\r\n",pTempInfo->AdapterName);
printf(" Description:%s\r\n",pTempInfo->Description);
printf(" MAC Address:%02X-%02X-%02X-%02X-%02X-%02X\r\n",pTempInfo->Address[0],
pTempInfo->Address[1],pTempInfo->Address[2],pTempInfo->Address[3],
pTempInfo->Address[4],pTempInfo->Address[5]);
IN_ADDR tempAddr;
tempAddr.S_un.S_addr=::inet_addr(pTempInfo->IpAddressList.IpAddress.String);
printf(" IPAddress:%s\r\n",::inet_ntoa(tempAddr));
tempAddr.S_un.S_addr=::inet_addr(pTempInfo->IpAddressList.IpMask.String);
printf(" Subnet Mask:%s\r\n",::inet_ntoa(tempAddr));
tempAddr.S_un.S_addr=::inet_addr(pTempInfo->GatewayList.IpAddress.String);
printf(" Default GateWay:%s\r\n",::inet_ntoa(tempAddr));
pTempInfo=pTempInfo->Next;
count++;
}
//3
if(NULL!=pAdapterInfo){free(pAdapterInfo);}
//4
return count;
}