用加载动态库Iphlpapi.dll的方法获取网卡信息

来源:互联网 发布:电脑拼接图片软件 编辑:程序博客网 时间:2024/06/05 04:00

用加载动态库Iphlpapi.dll的方法获取网卡信息.

1.定义结构体

#define MAX_ADAPTER_NAME_LENGTH 256#define MAX_ADAPTER_DESCRIPTION_LENGTH 128#define MAX_ADAPTER_ADDRESS_LENGTH 8typedef struct{ char String[4*4];} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;typedef struct _IP_ADDR_STRING{ struct _IP_ADDR_STRING* Next; IP_ADDRESS_STRING IpAddress; IP_MASK_STRING IpMask; DWORD Context;} IP_ADDR_STRING, *PIP_ADDR_STRING;typedef struct _IP_ADAPTER_INFO{ struct _IP_ADAPTER_INFO* Next; DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH+4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH+4]; UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD Index; UINT Type; UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires;} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

2.声明iphlpapi.dll中需要调用参数的调用方式为__stdcall,及参数类型

typedef DWORD (__stdcall* PGAINFO)(PIP_ADAPTER_INFO, PULONG);


3.主函数

HMODULE hInst = LoadLibrary("iphlpapi.dll");if(!hInst)printf("iphlpapi.dll no supported in this platform!\n");PGAINFO pGAInfo = (PGAINFO)GetProcAddress(hInst, "GetAdaptersInfo");if(pGAInfo == NULL){printf("can't found GetAdapterInfo function!\n");exit(0);}ULONG ulSize = 0;PIP_ADAPTER_INFO pInfo=NULL, d=NULL;while(pGAInfo(pInfo, &ulSize) != ERROR_SUCCESS){delete pInfo;int eSize = ulSize/sizeof(IP_ADAPTER_INFO);if(ulSize%sizeof(IP_ADAPTER_INFO)){eSize++;}pInfo = (PIP_ADAPTER_INFO)new(IP_ADAPTER_INFO[eSize]);}//GetAdapterInfo返回的是一个键表结构的网卡信息,可以用循环遍历得到每一个网卡的信息int i=0;for(d=pInfo; d!=NULL; d=d->Next){CString szNetInfo;szNetInfo.Format("%d. 网卡:%s", ++i, d->Description);cout<<szNetInfo<<endl;szNetInfo.Format("MAC 地址: %02x-%02x-%02x-%02x-%02x-%02x", d->Address[0], d->Address[1], d->Address[2], d->Address[3], d->Address[4], d->Address[5]);cout<<szNetInfo<<endl;szNetInfo.Format("IP 地址:%s", d->IpAddressList.IpAddress.String);cout<<szNetInfo<<endl;szNetInfo.Format("子网掩码:%s", d->IpAddressList.IpMask.String);cout<<szNetInfo<<endl;szNetInfo.Format("网关:%s", d->GatewayList.IpAddress.String);cout<<szNetInfo<<endl;}delete []pInfo;delete []d;FreeLibrary(hInst);