int main(int argc, char **argv)
{
PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
unsigned long stSize = sizeof(IP_ADAPTER_INFO);//得到结构体大小,用于GetAdaptersInfo参数
int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
if(nRel==ERROR_BUFFER_OVERFLOW)//如果函数返回的是ERROR_BUFFER_OVERFLOW,则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小,这也是说明为什么stSize既是一个输入量也是一个输出量
{
delete pIpAdapterInfo;//释放原来的内存空间
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];//重新申请内存空间用来存储所有网卡信息
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
}
if(nRel==ERROR_SUCCESS)
{
while (pIpAdapterInfo)//输出网卡信息,可能有多网卡,因此通过循环去判断
{
cout<<"Name:"<<pIpAdapterInfo->AdapterName<<endl;
cout<<"Description:"<<pIpAdapterInfo->Description<<endl;
switch(pIpAdapterInfo->Type)
{
case MIB_IF_TYPE_OTHER:
cout<<"Type:"<<"OTHER"<<endl;
break;
case MIB_IF_TYPE_ETHERNET:
cout<<"Type:"<<"ETHERNET"<<endl;
break;
case MIB_IF_TYPE_TOKENRING:
cout<<"Type:"<<"TOKENRING"<<endl;
break;
case MIB_IF_TYPE_FDDI:
cout<<"Type:"<<"FDDI"<<endl;
break;
case MIB_IF_TYPE_PPP:
cout<<"Type:"<<"PPP"<<endl;
break;
case MIB_IF_TYPE_LOOPBACK:
cout<<"Type:"<<"LOOPBACK"<<endl;
break;
case MIB_IF_TYPE_SLIP:
cout<<"Type:"<<"SLIP"<<endl;
break;
default:
cout<<pIpAdapterInfo->Type<<endl;
break;
}
cout<<"MAC:";
for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
if (i < pIpAdapterInfo->AddressLength-1)
printf("%02X-", pIpAdapterInfo->Address[i]);
else
printf("%02X\n", pIpAdapterInfo->Address[i]);
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);//可能网卡有多IP,因此通过循环去判断
int IPnumPerNetCard = 0;//记录每张网卡上的IP地址数量
do
{
cout<<"IP Qulity:"<<++IPnumPerNetCard<<endl;
cout<<"IP Address:"<<pIpAddrString->IpAddress.String<<endl;
cout<<"Subnet Mask:"<<pIpAddrString->IpMask.String<<endl;
cout<<"Gate:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
pIpAddrString=pIpAddrString->Next;
} while(pIpAddrString);
pIpAdapterInfo = pIpAdapterInfo->Next;
cout<<"--------------------------------------------------------------------"<<endl;
}
}
if (pIpAdapterInfo)delete pIpAdapterInfo;//释放内存空间
system("pause");
return 0;
}