DWORD GetAdaptersInfo(
  PIP_ADAPTER_INFO pAdapterInfo,  //指向一个缓冲区,用来取得IP_ADAPTER_INFO结构列表
  PULONG pOutBufLen   //指定上面缓冲区大小,如果大小不够,此参数返回所需大小

IP_ADAPTER_INFO结构包含了本地计算机网络适配器的信息
typedef struct _IP_ADAPTER_INFO {
  struct _IP_ADAPTER_INFO* Next;//指向链表中下一个适配器(计算机可能有多个适配器)
  DWORD ComboIndex; //保留字段
  char AdapterName[MAX_ADAPTER_NAME_LENGTH + ];//使用ANSI字符串表示的适配器名称
  char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + ];//使用ANSI字符串表示的适配器描述
  UINT AddressLength;//适配器MAC地址以字节计算的长度(一般6个字节)
  BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];//硬件地址以BYTE数组所表示
  DWORD Index;//适配器索引
  UINT Type;//适配器类型,主要有以下几种:
/*
* MIB_IF_TYPE_OTHER 1
* MIB_IF_TYPE_ETHERNET 6
* MIB_IF_TYPE_TOKENRING 9
* MIB_IF_TYPE_FDDI 15
* MIB_IF_TYPE_PPP 23
* MIB_IF_TYPE_LOOPBACK 24
* MIB_IF_TYPE_SLIP 28
*/
  UINT DhcpEnabled;//指定这个适配器是否开启DHCP
  PIP_ADDR_STRING CurrentIpAddress;//保留字段
  IP_ADDR_STRING IpAddressList;//该适配器的IPv4地址链表
  IP_ADDR_STRING GatewayList;//该适配器的网关IPv4地址链表
  IP_ADDR_STRING DhcpServer;//该适配器的DHCP服务器的IPv4 地址链表
  BOOL HaveWins;//该适配器是否使用WINS(Windows Internet名称服务)
  IP_ADDR_STRING PrimaryWinsServer;//WINS服务器主IP地址
  IP_ADDR_STRING SecondaryWinsServer;//WINS次IP地址
  time_t LeaseObtained;//获取当前DCHP租用时间
  time_t LeaseExpires;//当前DCHP租用期满时间
  } IP_ADAPTER_INFO,*PIP_ADAPTER_INFO;

IP_ADDR_STRING也是一个结构体

typedef struct _IP_ADDR_STRING {
struct _IP_ADDR_STRING* Next;//指向下一个IP地址信息
IP_ADDRESS_STRING IpAddress;
IP_MASK_STRING IpMask;//子网掩码
DWORD Context;
} IP_ADDR_STRING, *PIP_ADDR_STRING; typedef struct {
char String[ * ];
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING; typedef struct {
char String[ * ];
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;

完整代码如下

#include <iostream>
#include <windows.h>
#include <Iphlpapi.h>
#pragma comment(lib, "Iphlpapi.lib") using namespace std; BOOL GetGlobalData()
{
PIP_ADAPTER_INFO pIPAdapterInfo = new IP_ADAPTER_INFO();
PIP_ADAPTER_INFO adapters = nullptr;
ULONG size = sizeof(IP_ADAPTER_INFO);
//填充pIPadapterInfo变量,其中size既是一个输入量,也是一个输出量
int nRet = GetAdaptersInfo(pIPAdapterInfo, &size);
//记录网卡数量
int netCarNum = ; if (ERROR_BUFFER_OVERFLOW == nRet)
{
//如果返回此参数,说明GetAdaptersInfo参数传递的内存空间大小不够,同时传出size表示需要的内存空间大小
//释放原来的内存空间
delete pIPAdapterInfo;
pIPAdapterInfo = (PIP_ADAPTER_INFO)new byte[size];
//再次调用GetAdaptersInfo填充结构体
nRet = GetAdaptersInfo(pIPAdapterInfo, &size);
} if (ERROR_SUCCESS == nRet)
{
adapters = pIPAdapterInfo;
//输出网卡信息,可能有多卡,需要循环判断
while (adapters)
{
cout << " 网卡数量: " << ++netCarNum << endl;
cout << " 网卡名称: " << adapters->AdapterName << endl;
cout << " 网卡描述: " << adapters->Description << endl;
cout << " 网卡类型: ";
switch (adapters->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: ";
//以XX-XX-XX-XX-XX-XX的形式输出MAC
for (DWORD i = ; i < adapters->AddressLength; ++i)
{
if (i < adapters->AddressLength - )
{
printf("%02X-", adapters->Address[i]);
}
else
{
printf("%02X\n", adapters->Address[i]);
}
} //可能网卡有多IP,因此通过循环去判断
IP_ADDR_STRING *pIpAddrString = &(adapters->IpAddressList);
do
{
//记录每张网卡的IP地址数量
int IPNumPerCar = ;
cout << "该网卡上的IP数量:" << ++IPNumPerCar << endl;
cout << " IP 地址:" << pIpAddrString->IpAddress.String << endl;
cout << " 子网地址:" << pIpAddrString->IpMask.String << endl;
cout << " 网关地址:" << adapters->GatewayList.IpAddress.String << endl;
pIpAddrString = pIpAddrString->Next;
} while (pIpAddrString);
adapters = adapters->Next;
cout << "--------------------------------------------------------------------" << endl;
}
}
  //释放分配的内存
  if (pIPAdapterInfo)
    delete pIPAdapterInfo;
  
  return true;
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

C++通过GetAdapatersInfo获取网卡配置信息的更多相关文章

  1. C# 获取电脑配置信息

    对于软件绑定电脑常用到的方法汇总 public class Computer { public string MyProperty { get; set; } /// <summary> ...

  2. 使用ioctl获取网卡统计信息

    ethtool -S获取接口统计信息总共分三步: 1.获取统计项个数,使用SIOCETHTOOL+ETHTOOL_GSSET_INFO 2.(可选)获取统计项名字,使用SIOCETHTOOL+ETHT ...

  3. GetAdaptersInfo获取网卡配置和Ip地址信息

    一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址:如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种:因此,如果要获得本机所有网卡的IP和M ...

  4. spring利用扫描方式对bean的处理(对任何版本如何获取xml配置信息的处理)

    利用扫描的方式将组件注入容器,就也可以不用操作bean来实例化对象了. 下面我做一个例子 我用的spring3.2.2版本的 首先写一个spring.xml. <?xml version=&qu ...

  5. linux 网卡配置信息

    vi /etc/sysconfig/network-scripts/ifcfg-eth0

  6. NHibernate获取实体配置信息(表名,列名等等)

    // 注意这里有个&符号,并不是写错了,而是约定 就是这样写的ctx.GetObject("&SessionFactory") 这是官网地址http://nhfor ...

  7. .NetCore获取Json和Xml格式的配置信息

    本篇将和大家分享的是:如何获取Json和Xml格式的配置信息,主要介绍的是Configuration扩展方法的使用,因为netcore的web应用在Startup中已经默认嵌入appsettings. ...

  8. 28-Ubuntu-远程管理命令-02-查看网卡的配置信息

    命令 功能 ifconfig 查看网卡配置信息 ifconfig | grep inet 查看网卡对应的IP地址 ping  127.0.0.1 检测本地网卡是否正常 ping  IP地址 检测到目标 ...

  9. Linux CentOS虚拟机网卡配置

    最近在VMware安装CentOS6.5之后,每次从宿主机访问虚拟机的Oracle时,都要修改IP地址,因为没有设置虚拟机的IP,所以每次开机之后虚拟机的IP地址都是随机的,于是研究了下给虚拟机配置静 ...

随机推荐

  1. dataguard丢失归档日志处理

    检查alert日志发现报错如下 Wed Mar 27 15:40:30 2019Managed Standby Recovery not using Real Time ApplyParallel M ...

  2. CentOs7.5安装Redis

    前言 虽说现在都是买服务了,可是自己做的小DEMO偶尔也用用Redis,不会装也不行 变更记录 # 19.4.24  起笔 正文 官网 https://redis.io/ 首先去官网找到最新的链接 截 ...

  3. hdu2181 简单搜索

    题意: 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第 ...

  4. 迭代和JDB(课下作业,选做)

    迭代和JDB(课下作业,选做) 题目要求 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能 2 m,n 要通过命令行传入 3 提交测试运行截图 ...

  5. SignalR在Asp.NetCore中的使用

    SignalR简介 ASP.NET SignalR是为ASP.NET 开发人员提供的一个库,旨在为你的Web应用迅速简便的添加实时通信功能.这个Web通信功能是指:客户端可以实时从服务端代码拉取数据, ...

  6. UiAutomator2.0 - Toast信息的验证

    目录 问题:在做UI自动化测试时,偶尔会碰到 Toast 这种提示信息(如图),通过Uiautomatorviewer 无法获该类控件的信息.所以无法验证,该条case不能实现.然后就没然后了... ...

  7. html网页引用中文字体,解决加载缓慢办法

    [ttf 压缩]html网页引用中文字体,文件过大,加载缓慢的解决办法[字蛛][web font] [字蛛]http://font-spider.org/ 先安装好 NodeJS,然后执行: npm ...

  8. C#应用编程小例子-02-窗体最大化和最小化窗体大小

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. python爬取安居客二手房网站数据(转)

    之前没课的时候写过安居客的爬虫,但那也是小打小闹,那这次呢, 还是小打小闹 哈哈,现在开始正式进行爬虫书写 首先,需要分析一下要爬取的网站的结构: 作为一名河南的学生,那就看看郑州的二手房信息吧! 在 ...

  10. python 配置文件__ConfigParser

    基础读取配置文件 -read(filename)               直接读取文件内容 -sections()                      得到所有的section,并以列表的形 ...