MFC-GetAdaptersAddresses获取网卡信息

需要:#pragma comment(lib, "IPHLPAPI.lib")

GetAdaptersAddresses函数参数说明

	ULONG bufferSize = 0;ULONG  result = ::GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, nullptr, nullptr, &bufferSize);/*参数1:ULONG Family 网络协议族,此参数须为下列值之一AF_UNSPEC=0       返回与启用了 IPv4 或 IPv6 的适配器关联的 IPv4 和 IPv6 地址AF_INET=2         仅返回与启用了 IPv4 的适配器关联的 IPv4 地址AF_INET6=23       仅返回与启用了 IPv6 的适配器关联的 IPv6 地址参数2:ULONG Flags  要检索的地址类型概念解释:单播(Unicast):单播地址是一对一的通信方式,它用于将数据包从源地址发送到目标地址。源地址指定发送者的唯一标识符,而目标地址指定接收者的唯一标识符。只有目标地址与接收者匹配时,数据包才会传送给接收者。广播(Broadcast):广播地址是一对多的通信方式,它用于将数据包发送给同一个网络中的所有设备。广播地址是一个特殊的地址,用于指示所有设备都应该接收该数据包。广播可以是有限的(局域网内)或无限的(所有网络都接收)。多播(Multicast):多播地址是一对多的通信方式,它用于将数据包发送给一组特定的设备,这组设备被称为多播组。多播地址也是一种特殊的地址,它表明数据包是按照多播方式进行传输的。只有加入该多播组的设备才会接收到数据包此参数是以下值的组合。 如果此参数为零,则将返回单播、任意广播和多播 IP 地址GAA_FLAG_SKIP_UNICAST=0x0001     不要返回单播地址GAA_FLAG_SKIP_ANYCAST=0x0002     不要返回 IPv6 任何广播地址GAA_FLAG_SKIP_MULTICAST=0x0004   不要返回多播地址GAA_FLAG_SKIP_DNS_SERVER=0x0008   不要返回 DNS 服务器的地址GAA_FLAG_INCLUDE_PREFIX=0x0010    返回此适配器上的 IP 地址前缀列表。 设置此标志后,将返回 IPv6 和 IPv4 地址的 IP 地址前缀。GAA_FLAG_SKIP_FRIENDLY_NAME=0x0020    不要返回适配器友好名称GAA_FLAG_INCLUDE_WINS_INFO=0x0040     返回Windows Internet名称服务的地址 (WINS) 服务器。Windows Vista 及更高版本支持此标志GAA_FLAG_INCLUDE_GATEWAYS=0x0080       返回默认网关的地址,Windows Vista 及更高版本支持此标志GAA_FLAG_INCLUDE_ALL_INTERFACES=0x0100   返回所有NDIS接口的地址GAA_FLAG_INCLUDE_ALL_COMPARTMENTS=0x0200   返回所有路由隔离舱中的地址。此标志当前不受支持,并保留供将来使用GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER=0x0400   返回按隧道绑定顺序排序的适配器地址参数3:PVOID Reserved  此参数当前未使用,但保留供将来系统使用。 调用应用程序应为此参数传递 NULL参数4:[in, out] PIP_ADAPTER_ADDRESSES AdapterAddresses  指向缓冲区的指针,该缓冲区包含成功返回时 IP_ADAPTER_ADDRESSES 结构的链接列表参数5:[in, out] PULONG SizePointer  指向变量的指针,该变量指定 AdapterAddresses 指向的缓冲区的大小返回值:如果函数成功,则返回值 ERROR_SUCCESS=0 (定义为 与 NO_ERROR)如果函数失败,则返回值为以下错误代码之一ERROR_ADDRESS_NOT_ASSOCIATED=1228   地址尚未与网络终结点关联。 DHCP 租约信息可用ERROR_BUFFER_OVERFLOW=111          SizePointer 参数指示的缓冲区大小太小,无法保存适配器信息或 AdapterAddresses 参数为 NULLERROR_INVALID_PARAMETER=87   其中一个参数无效。对于以下任一情况,将返回此错误: SizePointer 参数为 NULL、 Address 参数不 AF_INET、 AF_INET6或 AF_UNSPEC,或者请求的参数的地址信息大于 ULONG_MAX。ERROR_NOT_ENOUGH_MEMORY=8     内存资源不足,无法完成操作ERROR_NO_DATA=232              找不到所请求参数的地址*/

GAA_FLAG_INCLUDE_PREFIX 什么是前缀列表 ?

IP 适配器的前缀是指网络接口的 IP 地址所属的网段。例如,对于一个 IPv4 地址 192.168.1.100 和子网掩码 255.255.255.0,它的前缀就是 192.168.1.0/24。同一个网段内的所有网络设备可以通过 IP 地址进行互相通信,而不需要经过路由器

IP_ADAPTER_ADDRESSES 结构体中常用字段的说明:

Next: 指向下一个 IP_ADAPTER_ADDRESSES 结构体的指针。用于遍历多个网络适配器的链表。AdapterName: 网络适配器的名称,以字符串形式表示。Description: 网络适配器的描述信息,以字符串形式表示。FirstUnicastAddress: 指向一个 IP_ADAPTER_UNICAST_ADDRESS 结构体的指针,表示网卡的第一个单播地址(IPv4 或 IPv6)。FirstAnycastAddress: 指向一个 IP_ADAPTER_ANYCAST_ADDRESS 结构体的指针,表示网卡的第一个任播地址(IPv6)。FirstMulticastAddress: 指向一个 IP_ADAPTER_MULTICAST_ADDRESS 结构体的指针,表示网卡的第一个组播地址(IPv4 或 IPv6)。FirstDnsServerAddress: 指向一个 IP_ADAPTER_DNS_SERVER_ADDRESS 结构体的指针,表示网卡的第一个 DNS 服务器地址。DnsSuffix: DNS 后缀,以字符串形式表示。PWCHAR FriendlyName: 网络适配器的友好名称,以字符串形式表示。BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH] : 网卡的物理地址(MAC 地址),以字节数组形式表示。ULONG PhysicalAddressLength: 物理地址的长度,以字节数表示IfIndex: 网络适配器的索引号。OperStatus: 网络适配器的操作状态,如 UP、DOWN 等。IfType: 网络适配器的类型,比如以太网、无线网卡等。Ipv6IfIndex: IPv6 协议的接口索引号。这些字段提供了有关网络适配器的各种信息,如名称、描述、地址等。通过遍历 IP_ADAPTER_ADDRESSES 的链表,可以获取系统中所有的网络适配器的详细信息

说明:

PhysicalAddressLength

PhysicalAddressLength 是指网卡的物理地址长度(或称为MAC地址长度)。在网络通信中,每个网卡都有一个唯一的物理地址,也称为MAC地址(Media Access Control Address)。

物理地址是由48位(6个字节)的十六进制数字表示的,通常采用冒号或连字符来分隔每个字节。例如,物理地址的格式可以是 00:1A:2B:3C:4D:5E00-1A-2B-3C-4D-5E

PhysicalAddressLength 变量表示物理地址的长度。在通常情况下,物理地址长度是固定的,为6个字节。因此,PhysicalAddressLength 的值通常是6。但是根据特定的网络设备或技术,也可能存在其他长度的物理地址。

通过获取网卡的物理地址长度,我们可以在程序中为物理地址分配足够的内存空间,并确保正确解析和处理物理地址

获取网卡的物理地址(MAC 地址)

	CString str;char buff[100];DWORD bufflen = 100;ULONG outBufLen = 0;ULONG dwRetVal = 0;PIP_ADAPTER_ADDRESSES pAddresses = nullptr;dwRetVal = ::GetAdaptersAddresses(AF_UNSPEC, 0, NULL, nullptr, &outBufLen);/*第一次GetAdaptersAddresses,outBufLen=0,只是为了获取实际需要的大小*///pAddresses = (IP_ADAPTER_ADDRESSES*)malloc(outBufLen);//根据实际空间大小申请空间pAddresses = static_cast<IP_ADAPTER_ADDRESSES*>(malloc(outBufLen)); // 分配足够的缓冲区空间dwRetVal = ::GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_ANYCAST, NULL, pAddresses, &outBufLen);/*AF_INET  仅返回与启用了 IPv4 的适配器关联的 IPv4 地址GAA_FLAG_SKIP_ANYCAST   不要返回 IPv6 任何广播地址*/if (dwRetVal == NO_ERROR) {str.Format(_T("网络适配器的友好名称:%s \n"), pAddresses->FriendlyName);//   【以太网】str.Format(_T("物理地址的长度:%d \n"), pAddresses->PhysicalAddressLength);//  【6】int n = sizeof(pAddresses->PhysicalAddress) / sizeof(pAddresses->PhysicalAddress[0]);  //网卡总数str.Format(_T("网卡总数:%d \n"), n);//  【8】for (int i = 0; i < n; i++) {str.Format(_T("网卡的物理地址(MAC 地址):n=%d    %x \n"), i, pAddresses->PhysicalAddress[i]);::OutputDebugString(str);/*网卡的物理地址(MAC 地址):n=0    74网卡的物理地址(MAC 地址):n=1    d0网卡的物理地址(MAC 地址):n=2    2b网卡的物理地址(MAC 地址):n=3    b7网卡的物理地址(MAC 地址):n=4    3e网卡的物理地址(MAC 地址):n=5    44网卡的物理地址(MAC 地址):n=6    0网卡的物理地址(MAC 地址):n=7    0*/}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131835.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景

文章目录 一、collect_set()/collect_list()二、实际运用把同一分组的不同行的数据聚合成一个行用下标可以随机取某一个聚合后的中的值用‘|’分隔开使用collect_set()/collect_list()使得全局有序 一、collect_set()/collect_list() 在 Hive 中想实现按某字段分组&#xff0c…

Python数据分析 — 数据分析概念、重要性、流程和常用工具

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。Python数据分析是利用Python编程语言进行数据处理、转换、清洗、可视化和建模的过程。Python在数据科学领域非常流行&#xff0c;有许多强大的库和工具可供使用&#xff0c;例如NumPy、Pandas、Matplotlib和Scikit-learn等…

导数公式及求导法则

目录 基本初等函数的导数公式 求导法则 有理运算法则 复合函数求导法 隐函数求导法 反函数求导法 参数方程求导法 对数求导法 基本初等函数的导数公式 基本初等函数的导数公式包括&#xff1a; C0(x^n)nx^(n-1)(a^x)a^x*lna(e^x)e^x(loga(x))1/(xlna)(lnx)1/x(sinx)cos…

服务器访问本机图片nginx配置

下面是Nginx的配置 然后是yml文件配置 后端返回给前端的数据直接返回这个地址就可以了 {"success": true,"code": "200","msg": "操作成功","data": [{"趋势": "https://120.26.98.185:8090/s…

YOLO物体检测系列3:YOLOV3改进解读

&#x1f388;&#x1f388;&#x1f388;YOLO 系列教程 总目录 YOLOV1整体解读 YOLOV2整体解读 YOLOV3提出论文&#xff1a;《Yolov3: An incremental improvement》 1、YOLOV3改进 这张图讲道理真的过分了&#xff01;&#xff01;&#xff01;我不是针对谁&#xff0c;在…

一点感受

做了两天企业数字化转型的评委&#xff0c;涉及全国最顶级的公司、最顶级的实际落地项目案例&#xff0c;由企业真实的落地团队亲自当面讲解。主要是为了了解了解真实的一线、真实的客户、真实的应用现状和应用水平。 &#xff08;1&#xff09;现状 我评审的涉及底层技术平台&…

JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用

一、什么是BeanShell&#xff1f; BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器&#xff0c;JMeter性能测试工具也充分接纳了BeanShell解释器&#xff0c;封装成了可配置的BeanShell前置和后置处理器&#xff0c;分别是 BeanShell Pre…

想要精通算法和SQL的成长之路 - 受限条件下可到达节点的数目

想要精通算法和SQL的成长之路 - 受限条件下可到达节点的数目 前言一. 相交链表&#xff08;邻接图和DFS&#xff09; 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 相交链表&#xff08;邻接图和DFS&#xff09; 原题链接 public int reachableNodes(int n, int[][] ed…

Linux下Minio分布式存储安装配置(图文详细)

文章目录 Linux下Minio分布式存储安装配置(图文详细)1 资源准备1.1 创建存储目录1.2 获取Minio Server资源1.3 获取Minio Client资源 2 Minio Server安装配置2.1 切换目录2.2 后台启动2.3 查看进程2.4 控制台测试 3 Minio Client安装配置3.1 切换目录3.2 移动mc脚本3.2 运行mc命…

LeetCode 39. Combination Sum【回溯,剪枝】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

cudnn-windows-x86_64-8.6.0.163_cuda11-archive 下载

网址不太好访问的话,请从下面我提供的分享下载 Download cuDNN v8.6.0 (October 3rd, 2022), for CUDA 11.x 此资源适配 cuda11.x 将bin和include文件夹里的文件&#xff0c;分别复制到C盘安装CUDA目录的对应文件夹里 安装cuda时自动设置了 CUDA_PATH_V11_8 及path C:\Progra…

数据结构——排序算法——快速排序

快速排序算法的基本思想是 1.从数组中取出一个数&#xff0c;称之为基数&#xff08;pivot&#xff09; 2.遍历数组&#xff0c;将比基数大的数字放到它的右边&#xff0c;比基数小的数字放到它的左边。遍历完成后&#xff0c;数组被分成了左右两个区域 3.将左右两个区域视为两…

leecode 每日一题 2596. 检查骑士巡视方案

2596. 检查骑士巡视方案 骑士在一张 n x n 的棋盘上巡视。在 有效 的巡视方案中&#xff0c;骑士会从棋盘的 左上角 出发&#xff0c;并且访问棋盘上的每个格子 恰好一次 。 给你一个 n x n 的整数矩阵 grid &#xff0c;由范围 [0, n * n - 1] 内的不同整数组成&#xff0c;其…

记录selenium和chrome使用socks代理打开网页以及查看selenium的版本

使用前&#xff0c;首先打开socks5全局代理。 之前我还写过一篇关于编程中使用到代理的情况&#xff1a; 记录一下python编程中需要使用代理的解决方法_python 使用全局代理_小小爬虾的博客-CSDN博客 在本文中&#xff0c;首先安装selenium和安装chrome浏览器。 参考我的文章…

vue中实现瀑布流布局

父组件 <template><WaterfallFlow :list"list"/> </template><script setup lang"ts">import WaterfallFlow from "/components/WaterfallFlow.vue"; import {reactive} from "vue"; type listType {height…

向量范数及其Python代码

【向量范数】 向量由于既有大小又有方向&#xff0c;所以不能直接比较大小。 向量范数通过将向量转化为实数&#xff0c;然后进行向量的大小比较。 所以&#xff0c;向量范数是用于度量“向量大小”的量。 设向量 &#xff0c;则有&#xff1a; ● 向量的 范数&#xff1a; ●…

C语言入门Day_19 初识函数

目录 1.函数的定义 2.函数的调用 3.易错点 4.思维导图 前言&#xff1a; printf()我们已经很熟悉了&#xff0c;它有一个特定的功能&#xff0c;就是在屏幕上输出一行文字。之前的课程我们都称呼printf()为一个功能&#xff0c;实际上ta在编程中有个特定的名字——函数。 …

嵌入式学习笔记(28)按键和CPU的中断系统

按键的物理特性 (1)、平时没人按的时候&#xff0c;弹簧把按键按钮弹开。此时内部断开的。 (2)、有人按下的时候&#xff0c;手的力量克服弹簧的弹力&#xff0c;将按钮按下&#xff0c;此时内部保持接通&#xff08;闭合&#xff09;状态&#xff1b;如果手拿开&#xff0c;…

VSCode 安装使用教程 环境安装配置 保姆级教程

一个好用的 IDE 不仅能提升我们的开发效率&#xff0c;还能让我们保持愉悦的心情&#xff0c;这样才是非常 Nice 的状态 ^_^ 那么&#xff0c;什么是 IDE 呢 &#xff1f; what IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;是含代码…

线性代数的本质(十)——矩阵分解

文章目录 矩阵分解LU分解QR分解特征值分解奇异值分解奇异值分解矩阵的基本子空间奇异值分解的性质矩阵的外积展开式 矩阵分解 矩阵的因式分解是把矩阵表示为多个矩阵的乘积&#xff0c;这种结构更便于理解和计算。 LU分解 设 A A A 是 m n m\times n mn 矩阵&#xff0c;…