VC获取物理网卡的MAC地址

获取网卡的MAC地址的方法很多,如:Netbios,SNMP,GetAdaptersInfo等。经过测试发现 Netbios 方法在网线拔出的情况下获取不到MAC,而 SNMP 方法有时会获取多个重复的网卡的MAC,试来试去还是 GetAdaptersInfo 方法比较好,网线拔出的情况下可以获取MAC,而且很准确,不会重复获取网卡。

GetAdaptersInfo 方法也不是十全十美,也存在些问题:

1)如何区分物理网卡和虚拟网卡;

2)如何区分无线网卡和有线网卡;

3)“禁用”的网卡获取不到。

关于问题1和问题2我的处理办法是:

区分物理网卡和虚拟网卡:pAdapter->Description中包含"PCI"是:物理网卡。(试了3台机器可以)

区分无线网卡和有线网卡:pAdapter->Type为71的是:无线网卡。(试了2个无线网卡也可以)

现在把代码贴出来和大家分享:

#include "stdafx.h"#include <atlbase.h>#include <atlconv.h>#include "iphlpapi.h"#pragma comment ( lib, "Iphlpapi.lib" )int main(int argc, char* argv[]){    PIP_ADAPTER_INFO pAdapterInfo;    PIP_ADAPTER_INFO pAdapter = NULL;    DWORD dwRetVal = 0;    pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );    ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);    if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS)     {        GlobalFree (pAdapterInfo);        pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);    }    if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) == NO_ERROR)     {        pAdapter = pAdapterInfo;        while (pAdapter)         {            if(                strstr(pAdapter->Description,"PCI") > 0 // pAdapter->Description中包含"PCI"为:物理网卡                || pAdapter->Type == 71                   // pAdapter->Type是71为:无线网卡                )            {                printf("------------------------------------------------------------\n");                printf("Adapter Name: \t%s\n", pAdapter->AdapterName);                printf("Adapter Desc: \t%s\n", pAdapter->Description);                printf("Adapter Addr: \t");                for (UINT i = 0; i < pAdapter->AddressLength; i++)                {                    printf("%02X%c", pAdapter->Address[i],                                     i == pAdapter->AddressLength - 1 ? '\n' : '-');                }                printf("Adapter Type: \t%d\n", pAdapter->Type);                printf("IP Address: \t%s\n", pAdapter->IpAddressList.IpAddress.String);                printf("IP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);            }            pAdapter = pAdapter->Next;        }    }    else     {        printf("Call to GetAdaptersInfo failed.\n");    }    return 0;}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索printf
, 网卡
, 无线网卡
, description
, snmp vc++6 0
, vc++snmp++测试
物理
vc获取网卡mac地址、vc获取硬盘物理序列号、vc 获取网卡流量、vc 监听网卡获取tcp、vc 获取网卡下载速度,以便于您获取更多的相关知识。

时间: 2025-01-26 19:04:16

VC获取物理网卡的MAC地址的相关文章

php获取网卡的MAC地址支持WIN/LINUX系统_php技巧

复制代码 代码如下: <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $return_array = array(); // 返回带有MAC地址的字串数组 var $mac_addr; function GetMacAddr($os_type){ switch ( strtolower($os_type) ){ case "linux": $this->for

js获取客户端网卡的IP地址、MAC地址

 这篇文章主要介绍了js获取客户端网卡的IP地址.MAC地址的方法,需要的朋友可以参考下  代码如下: <html>  <head>  <title></title>  </head>  <body>  <object classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6" id="locator" style="display:

JS获取客户端网卡物理地址(MAC)

js|客户端 首先,我们知道手动查看MAC地址的方法有以下几种(我用的操作系统是Windows XP): 1.点击菜单"开始-所有程序-附件-系统工具-系统信息",接着在弹出的窗口中点击"组件-网络-适配器",稍等片刻,我们就可以在右面看见网络适配器的详细信息了,其中就包括MAC地址. 2.打开"运行"对话框输入"cmd",接着在打开的命令行窗口中输入"ipconfig /all",按回车后找到"

C#取得设备网卡的MAC地址和硬盘的卷标号

硬盘 ( 一 ).说明取得设备网卡的MAC地址和硬盘的卷标号( 二 ).图片示例 ( 三 ).代码using System;using System.Management;namespace NetCard{/// <summary> /// 读取设备 /// </summary> public class run {private ManagementClass mc; private ManagementObjectCollection moc; private Managem

如何获取机器的真实MAC地址

问题描述 如何获取机器的真实MAC地址注意:是真实的MAC地址,即使被其他的软件修改过了,也一样能读取到真实的MAC,如下图,能检测出MAC被修改了.请高手指教本人试过很多方法,但读取的不是真实的MAC,读取的都是被修改过的. 解决方案 本帖最后由 qq_31330735 于 2015-09-15 17:05:11 编辑解决方案二:啥叫真实的呢?一滴河水它上一秒钟的真实的河水状态,你怎么从这一秒钟的河水中找出来?那你就可以上火星安家了.解决方案三:所谓"真实的",不过是个障眼法.比如说

python通过scapy获取局域网所有主机mac地址示例_python

python通过scapy获取局域网所有主机mac地址 复制代码 代码如下: #!/usr/bin/env python# -*- coding: utf-8 -*-from scapy.all import srp,Ether,ARP,confipscan='192.168.1.1/24'try:    ans,unans = srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=ipscan),timeout=2,verbose=False)exc

vc获取计算机名和ip地址的方法_C 语言

本文实例讲述了vc获取计算机名和ip地址的方法.分享给大家供大家参考.具体实现方法如下: #include <winsock2.h> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") void main() { WSADATA wsadata; WORD dwVersionRequested; int err; err=WSAStartup(dwVersionRequested,&wsadata);

flex能获取CPU信息和MAC地址吗?

问题描述 flex能获取CPU信息和MAC地址吗? 问题补充:我的意思是获取别人的MAC地址,作为唯一标识,java好像只能获取本地的吧. 解决方案 java 可以获取CPU MAC 用flex调用java代码java 有一个 sigar-1.6.3.jar 这个可以获取硬件信息.参考文档:http://www.cnblogs.com/mypm/archive/2011/03/27/1996621.html

贡献PHP获取网卡的MAC地址

<?php/**获取机器网卡的物理(MAC)地址 wwa $Exp **/class GetMacAddr{var $return_array = array(); // 返回带有MAC地址的字串数组var $mac_addr; function GetMacAddr($os_type){switch ( strtolower($os_type) ){case "linux":$this->forLinux();break;case "solaris":