使用IP Helpers API获取本地网络信息

//通过使用IP Helpers API获取本地网络适配器信息
//获取信息包括:网络适配器名、网络适配器描述、MAC地址、IP地址、子网掩码、网关、是否启动DHCP

#include "stdafx.h"
#include "iostream"
#include "winsock2.h"
#include "iphlpapi.h"

using namespace std;

#pragma comment(lib,"IPHLPAPI.lib") //IP Helps API开发包的静态库


int _tmain(int argc, _TCHAR* argv[])
{
//指定获取到的网络信息结构体链表的指针
IP_ADAPTER_INFO *pAdapterInfo;
//保存获取到的网络信息结构体链表的长度
ULONG ulOutBufLen;
//返回调用编码
DWORD dwRetVal;
//在轮循所有网络信息适配器时使用的单个结构体变量
PIP_ADAPTER_INFO pAdapter;

//为pAdapterInfo分配空间
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
ulOutBufLen =sizeof(IP_ADAPTER_INFO);
//在获取本地信息的过程中,需要两次调用GetAdaptersInfo()函数。第1次调用可以获取返回数据的大小,
//第2次调用使用前面获取到的数据大小作为参数,获取实际的IP_ADAPTER_INFO结构内容
//第1次调用GetAdapterInfo(),获取返回结果的大小保存到ulOutBufLen
if (GetAdaptersInfo(pAdapterInfo,&ulOutBufLen) !=ERROR_SUCCESS)
{
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
}
//第2次调用GetAdaptersInfo(),获取本地网络信息保存到结构体pAdapterInfo中
if (dwRetVal = GetAdaptersInfo(pAdapterInfo,&ulOutBufLen) !=ERROR_SUCCESS)
{
cout<<"GetAdaptersInfo Error:"<<dwRetVal<<endl;
}

//显示本地网络适配器信息
//本地网络信息已经读取到pAdapterInfo链表中,因为本地可能已经安装多个网络适配器,所以需要使用while语句处理pAdapterInfo
//链表中的每个IP_ADAPTER_INFO结构体,并显示其中的网络信息
pAdapter = pAdapterInfo;
while (pAdapter)
{
cout<<"网络适配器名:"<<pAdapter->AdapterName<<endl;
cout<<"网络适配器描述:"<<pAdapter->Description<<endl;
cout<<"MAC地址:"<<endl;
for (int i=0;i<pAdapter->AddressLength;i++)
{
if (i==(pAdapter->AddressLength -1))
{
cout<<(int)pAdapter->Address[i];
}
else
{
cout<<(int)pAdapter->Address[i];
}
}
cout<<endl;
cout<<"IP地址:"<<pAdapter->IpAddressList.IpAddress.String<<endl;
cout<<"子网掩码:"<<pAdapter->IpAddressList.IpMask.String<<endl;
cout<<"网关:"<<pAdapter->GatewayList.IpAddress.String<<endl;

cout<<"*******************************************************"<<endl;
if (pAdapter->DhcpEnabled)
{
cout<<"启用DHCP:"<<"是"<<endl;
cout<<"DHCP服务器:"<<pAdapter->DhcpServer.IpAddress.String<<endl;
}
else
{
cout<<"启用DHCP:"<<"否"<<endl;
}
pAdapter = pAdapter->Next;

}

if(pAdapterInfo)
free(pAdapterInfo);

system("pause");
return 0;
}

posted @ 2015-11-18 23:18  del_le  阅读(362)  评论(0编辑  收藏  举报