wince中获取有线网卡和无线网卡ip信息的实例
2014-01-22 15:18
393 查看
#include <WinSock2.h>
#include <Iphlpapi.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
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参数既是一个输入量也是一个输出量
int netCardNum = 0;//记录网卡数量
int IPnumPerNetCard = 0; //记录每张网卡上的IP地址数量
if (ERROR_BUFFER_OVERFLOW == nRel)
{
//如果函数返回的是ERROR_BUFFER_OVERFLOW
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
//这也是说明为什么stSize既是一个输入量也是一个输出量
delete pIpAdapterInfo;//释放原来的内存空间
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];//重新申请内存空间用来存储所有网卡信息
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
}
if (ERROR_SUCCESS == nRel)
{
//输出网卡信息
//可能有多网卡,因此通过循环去判断
while (pIpAdapterInfo)
{
cout<<"网卡数量:"<<++netCardNum<<endl;
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
switch(pIpAdapterInfo->Type)
{
case MIB_IF_TYPE_OTHER:
cout<<"网卡类型:"<<"OTHER"<<endl;
break;
case MIB_IF_TYPE_ETHERNET:
cout<<"网卡类型:"<<"ETHERNET"<<endl;
break;
case MIB_IF_TYPE_TOKENRING:
cout<<"网卡类型:"<<"TOKENRING"<<endl;
break;
case MIB_IF_TYPE_FDDI:
cout<<"网卡类型:"<<"FDDI"<<endl;
break;
case MIB_IF_TYPE_PPP:
printf("PP\n");
cout<<"网卡类型:"<<"PPP"<<endl;
break;
case MIB_IF_TYPE_LOOPBACK:
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
break;
case MIB_IF_TYPE_SLIP:
cout<<"网卡类型:"<<"SLIP"<<endl;
break;
default:
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]);
}
cout<<"网卡IP地址如下:"<<endl;
//可能网卡有多IP,因此通过循环去判断
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
do
{
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
pIpAddrString=pIpAddrString->Next;
} while (pIpAddrString);
pIpAdapterInfo = pIpAdapterInfo->Next;
cout<<"--------------------------------"<<endl;
}
}
//释放内存空间
if (pIpAdapterInfo)
{
delete pIpAdapterInfo;
}
return 0;
}
#include <Iphlpapi.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
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参数既是一个输入量也是一个输出量
int netCardNum = 0;//记录网卡数量
int IPnumPerNetCard = 0; //记录每张网卡上的IP地址数量
if (ERROR_BUFFER_OVERFLOW == nRel)
{
//如果函数返回的是ERROR_BUFFER_OVERFLOW
//则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
//这也是说明为什么stSize既是一个输入量也是一个输出量
delete pIpAdapterInfo;//释放原来的内存空间
pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];//重新申请内存空间用来存储所有网卡信息
nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize); //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
}
if (ERROR_SUCCESS == nRel)
{
//输出网卡信息
//可能有多网卡,因此通过循环去判断
while (pIpAdapterInfo)
{
cout<<"网卡数量:"<<++netCardNum<<endl;
cout<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
switch(pIpAdapterInfo->Type)
{
case MIB_IF_TYPE_OTHER:
cout<<"网卡类型:"<<"OTHER"<<endl;
break;
case MIB_IF_TYPE_ETHERNET:
cout<<"网卡类型:"<<"ETHERNET"<<endl;
break;
case MIB_IF_TYPE_TOKENRING:
cout<<"网卡类型:"<<"TOKENRING"<<endl;
break;
case MIB_IF_TYPE_FDDI:
cout<<"网卡类型:"<<"FDDI"<<endl;
break;
case MIB_IF_TYPE_PPP:
printf("PP\n");
cout<<"网卡类型:"<<"PPP"<<endl;
break;
case MIB_IF_TYPE_LOOPBACK:
cout<<"网卡类型:"<<"LOOPBACK"<<endl;
break;
case MIB_IF_TYPE_SLIP:
cout<<"网卡类型:"<<"SLIP"<<endl;
break;
default:
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]);
}
cout<<"网卡IP地址如下:"<<endl;
//可能网卡有多IP,因此通过循环去判断
IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
do
{
cout<<"该网卡上的IP数量:"<<++IPnumPerNetCard<<endl;
cout<<"IP 地址:"<<pIpAddrString->IpAddress.String<<endl;
cout<<"子网地址:"<<pIpAddrString->IpMask.String<<endl;
cout<<"网关地址:"<<pIpAdapterInfo->GatewayList.IpAddress.String<<endl;
pIpAddrString=pIpAddrString->Next;
} while (pIpAddrString);
pIpAdapterInfo = pIpAdapterInfo->Next;
cout<<"--------------------------------"<<endl;
}
}
//释放内存空间
if (pIpAdapterInfo)
{
delete pIpAdapterInfo;
}
return 0;
}
相关文章推荐
- 树莓派Linux下无线网卡无法获取IP,不识别,等问题
- c#获取网卡的ip等信息
- 获取网卡信息(MAC,IP等)小程序
- 获取本机所有网卡的网卡名、网卡描述、网卡MAC地址、网卡IP、网卡类型等信息及网线是否插入状态
- vc获取mac地址(无线网卡和有线网卡)
- Qt5获取网卡/IP等信息
- Qt获取IP地址、MAC地址等网卡信息,区分本地网卡、无线网卡和虚拟网卡
- VS2012 C++ 中通过GetAdaptersInfo获取多网卡,多IP地址信息
- 智能电视的网络状态和ip获取(有线和无线)
- c#获取和设置网卡ip/dns等信息
- c++获取本机网卡信息(IP,MAC,网关,子网掩码)
- 自己写的获取网卡信息(MAC,IP等)小程序
- MSDN例子 获取网卡、ip等信息
- C#中获取 IP、MAC等信息实例
- linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)
- 网络公共函数(大小端字节转换、网卡/ip信息获取等。)
- Python获取网卡信息(名称、MAC、IP、网关等) 推荐
- linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)
- linux下C编程_获取指定网卡IP信息
- 获取外网IP和本机所有网卡地址信息