19,502
社区成员
发帖
与我相关
我的任务
分享
#ifndef _GET_NETWORK_INFO_H_
#define _GET_NETWORK_INFO_H_
#include "Iphlpapi.h"
/* 执行输出以下结果:
Adapter Name: {1458CBA9-9466-45B1-8B3A-1FD60D334A77}
Adapter Desc: Realtek PCIe GBE Family Controller - 数据包计划程序微型端口
Adapter Address: 74-27-EA-EF-A4-5F
IP Address: 192.168.3.97
IP Mask: 255.255.255.0
Gateway: 192.168.3.254
DHCP Enabled: No
Have Wins: No
*/
typedef struct One_Adapter_Info_T
{
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
}One_Adapter_Info, *pOne_Adapter_Info;
BOOL GetNetworkInfo(pOne_Adapter_Info pOneAdapterInfo,char *pcOneDesc,CString &csIPList);
#ifndef _WIN32_WCE
BOOL GetNetworkInfoTemp(pOne_Adapter_Info pOneAdapterInfo,char *pcOneDesc);
#endif
#endif
#include "stdafx.h"
#include "GetNetworkInfo.h"
#pragma comment(lib,"Iphlpapi.lib")
BOOL GetNetworkInfo(pOne_Adapter_Info pOneAdapterInfo,char *pcOneDesc,CString &csIPList)
{
PIP_ADAPTER_INFO pAdapterInfos = NULL;
DWORD dwRetVal = 0;
ULONG unOutBufLen = 0;
csIPList.Empty();
pAdapterInfos = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO));
unOutBufLen = sizeof(IP_ADAPTER_INFO);
// 第一次调用 GetAdapterInfo 获取 ulOutBufLen 大小
if(ERROR_BUFFER_OVERFLOW == GetAdaptersInfo(pAdapterInfos,&unOutBufLen))
{
free(pAdapterInfos);
pAdapterInfos = (IP_ADAPTER_INFO *)malloc(unOutBufLen);
}
dwRetVal = GetAdaptersInfo(pAdapterInfos,&unOutBufLen);
if(NO_ERROR == dwRetVal)
{
PIP_ADAPTER_INFO pAdapterTmp = pAdapterInfos; // 遍历指针
while(pAdapterTmp)
{
if(NULL != pcOneDesc && NULL != pOneAdapterInfo)
{
if(csIPList.IsEmpty())
{
csIPList = CString(pAdapterTmp->IpAddressList.IpAddress.String);
}
else
{
csIPList += CString("\\") + CString(pAdapterTmp->IpAddressList.IpAddress.String);
}
if(0 == strncmp(pcOneDesc,pAdapterTmp->Description,strlen(pcOneDesc)))
{
ZeroMemory(pOneAdapterInfo,sizeof(One_Adapter_Info));
strcpy(pOneAdapterInfo->AdapterName,pAdapterTmp->AdapterName);
strcpy(pOneAdapterInfo->Description,pAdapterTmp->Description);
pOneAdapterInfo->AddressLength = pAdapterTmp->AddressLength;
memcpy(pOneAdapterInfo->Address,pAdapterTmp->Address,sizeof(char) * (MAX_ADAPTER_ADDRESS_LENGTH));
pOneAdapterInfo->IpAddressList = pAdapterTmp->IpAddressList;
pOneAdapterInfo->GatewayList = pAdapterTmp->GatewayList;
free(pAdapterInfos);
csIPList.Empty();
csIPList = CString(pOneAdapterInfo->IpAddressList.IpAddress.String);
return TRUE;
}
}
#ifndef _WIN32_WCE
if(pAdapterTmp->DhcpEnabled)
{
errno_t error;
struct tm newTime;
char cBuffer[32];
error = localtime_s(&newTime,&pAdapterTmp->LeaseObtained);
if(error)
{
}
else
{
error = asctime_s(cBuffer, 32, &newTime);
if(!error)
{
// TRACE(L"%s", cBuffer);
}
}
error = localtime_s(&newTime,&pAdapterTmp->LeaseExpires);
if(!error)
{
error = asctime_s(cBuffer,32,&newTime);
if(!error)
{
// TRACE(L"%s", cBuffer);
}
}
}
if(pAdapterTmp->HaveWins)
{
// TRACE(L"Primary Wins Server: %s\n",pAdapterTmp->PrimaryWinsServer.IpAddress.String);
// TRACE(L"Secondary Wins Server: %s\n",pAdapterTmp->SecondaryWinsServer.IpAddress.String);
}
#endif
pAdapterTmp = pAdapterTmp->Next;
}
free(pAdapterInfos);
return FALSE;
}
return FALSE;
}
/* PC 上测试用*/
#ifndef _WIN32_WCE
BOOL GetNetworkInfoTemp(pOne_Adapter_Info pOneAdapterInfo,char *pcOneDesc)
{
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
if (pAdapterInfo == NULL) {
TRACE("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
{
pAdapter = pAdapterInfo;
while (pAdapter)
{
if(NULL != pcOneDesc && NULL != pOneAdapterInfo)
{
if(0 == strncmp(pcOneDesc,pAdapter->Description,strlen(pcOneDesc)))
{
ZeroMemory(pOneAdapterInfo,sizeof(One_Adapter_Info));
strcpy(pOneAdapterInfo->AdapterName,pAdapter->AdapterName);
strcpy(pOneAdapterInfo->Description,pAdapter->Description);
pOneAdapterInfo->AddressLength = pAdapter->AddressLength;
memcpy(pOneAdapterInfo->Address,pAdapter->Address,sizeof(char) * (MAX_ADAPTER_ADDRESS_LENGTH));
pOneAdapterInfo->IpAddressList = pAdapter->IpAddressList;
pOneAdapterInfo->GatewayList = pAdapter->GatewayList;
}
}
TRACE("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
TRACE("\tAdapter Desc: \t%s\n", pAdapter->Description);
TRACE("\tAdapter Addr: \t");
for (UINT i = 0; i < pAdapter->AddressLength; i++) {
if (i == (pAdapter->AddressLength - 1))
TRACE("%.2X\n",(int)pAdapter->Address[i]);
else
TRACE("%.2X-",(int)pAdapter->Address[i]);
}
TRACE("\tIP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);
TRACE("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
TRACE("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
TRACE("\t***\n");
if (pAdapter->DhcpEnabled)
{
}
pAdapter = pAdapter->Next;
}
free(pAdapterInfo);
}
return TRUE;
}
return FALSE;
}
#endif