C++通过GetAdapatersInfo获取网卡配置信息
DWORD GetAdaptersInfo(
PIP_ADAPTER_INFO pAdapterInfo, //指向一个缓冲区,用来取得IP_ADAPTER_INFO结构列表
PULONG pOutBufLen //指定上面缓冲区大小,如果大小不够,此参数返回所需大小
)
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获取网卡配置信息的更多相关文章
- C# 获取电脑配置信息
对于软件绑定电脑常用到的方法汇总 public class Computer { public string MyProperty { get; set; } /// <summary> ...
- 使用ioctl获取网卡统计信息
ethtool -S获取接口统计信息总共分三步: 1.获取统计项个数,使用SIOCETHTOOL+ETHTOOL_GSSET_INFO 2.(可选)获取统计项名字,使用SIOCETHTOOL+ETHT ...
- GetAdaptersInfo获取网卡配置和Ip地址信息
一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址:如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种:因此,如果要获得本机所有网卡的IP和M ...
- spring利用扫描方式对bean的处理(对任何版本如何获取xml配置信息的处理)
利用扫描的方式将组件注入容器,就也可以不用操作bean来实例化对象了. 下面我做一个例子 我用的spring3.2.2版本的 首先写一个spring.xml. <?xml version=&qu ...
- linux 网卡配置信息
vi /etc/sysconfig/network-scripts/ifcfg-eth0
- NHibernate获取实体配置信息(表名,列名等等)
// 注意这里有个&符号,并不是写错了,而是约定 就是这样写的ctx.GetObject("&SessionFactory") 这是官网地址http://nhfor ...
- .NetCore获取Json和Xml格式的配置信息
本篇将和大家分享的是:如何获取Json和Xml格式的配置信息,主要介绍的是Configuration扩展方法的使用,因为netcore的web应用在Startup中已经默认嵌入appsettings. ...
- 28-Ubuntu-远程管理命令-02-查看网卡的配置信息
命令 功能 ifconfig 查看网卡配置信息 ifconfig | grep inet 查看网卡对应的IP地址 ping 127.0.0.1 检测本地网卡是否正常 ping IP地址 检测到目标 ...
- Linux CentOS虚拟机网卡配置
最近在VMware安装CentOS6.5之后,每次从宿主机访问虚拟机的Oracle时,都要修改IP地址,因为没有设置虚拟机的IP,所以每次开机之后虚拟机的IP地址都是随机的,于是研究了下给虚拟机配置静 ...
随机推荐
- 怎样解决if __name__ == "__main__":下面的代码没有执行的问题
很多初学者可能在用pycharm运行代码时会出现if __name__ == "__main__":下面的代码没有执行的问题,出现这类问题的原因是unittest运行姿势造成的,如 ...
- 1、阿里云ECS内部机器端口被100.117.90段的ip疯狂扫描导致业务异常
故障现象: 解决方案: 1.临时解决 iptables -I INPUT -s 100.117.0.0/12 -j DROP 2.后续解决 提交工单,寻找阿里服务. 后续定位是以前配置过的SLB在搞鬼 ...
- vue.js遍历ajax请求的数据
<div id="dv" style="text-align: center;"><div class="head input-gr ...
- Photoshop 操作
本文主要记录在工作过程中使用ps的一些快捷键或操作顺序 1.ctrl+H:取消标尺 2.ctrl+D:取消选区 3.看矩形尺寸:选中矩形图层 >窗口 >属性(w:宽 H:高) 4.看图层 ...
- Python3学习笔记之十九
1. 什么是orm? object relation mapping 对象关系映射 一旦确定表关系为一对多:在多的表中添加关联字段. 一对一:可以在任意一张表添加关联字段. 多对多:创建第三 ...
- windows使用pyecharts报错 No module named 'pyecharts_snapshot
下载此文件后,使用命令 pip install pyecharts_snapshot-0.1.8-py2.py3-none-any.whl 安装完成即可 链接地址:https://pypi.org/p ...
- .net基础学java系列(六)Java基础
一.废话 .net学java为何一直没入坑?其实大家都知道,语法很相似,就是使用的习惯不同 稍微的语法差异 结构体系不同 IDE不同 类库集不同 各种框架不同 对于我来说,我一直被第三道坎拦住了,所以 ...
- Model类代码生成器
using Humanizer; using System; using System.Collections.Generic; using System.Data; using System.Dat ...
- react native 中实现个别页面禁止截屏
这里主要用到了原生模块,下面贴出FlagSecureModule.java的代码 package com.studyproj.flagsecure; import android.util.Log; ...
- docker修改容器参数
docker update -m 500m --memory-swap - f669487f0804