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;
}
VC获取物理网卡的MAC地址的更多相关文章
- Java获取网卡的mac地址
为了项目的安全,有时候需要得到电脑的唯一码,比如:网卡的mac地址.和大家分享一下,下面是项目中用到的工具类: import java.io.BufferedReader;import java.io ...
- inux网卡与MAC地址绑定方法总结
使用linux系统时会出现这样的情况,当你安装了某个网卡的驱动程序时,或者安装了与网卡相关的程序后. 网卡会出现所谓的漂移现象.(注意:不是飘逸).可能的表象为: (1):网卡顺序颠倒,比如之 ...
- Java获取主板序列号、MAC地址、CPU序列号工具类
import java.io.File; import java.io.FileWriter; import java.io.BufferedReader; import java.io.IOExce ...
- PHP获取网卡的MAC地址原码;目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址
声明转换于其它博客当中的. <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $ ...
- Linux下修改网卡的mac地址
方法1: # ifconfig ethX down # ifconfig ethX hw ether NEW_MAC_ADDR # ifconfig ethX up 但是这样重启后就失效了,需要再敲一 ...
- 如何获取公网IP的mac地址
如何获取远程IP的mac地址 思路分析 由于java本身没有相关的jar包进行获取,所以这里介绍从其他的方面进行入手和实践 使用的工具对比: tcpdump tshark pcap4j 都可以达到抓包 ...
- JAVA获取本机的MAC地址
/** * 获取本机的Mac地址 * @return */ public String getMac() { InetAddress ia; byte[] mac = null; try { // 获 ...
- Linux:永久修改网卡的MAC地址
比如:搭建一个虚拟机环境之后,需要N个一样的系统,可以本地复制虚拟机来实现.但是复制之后,网卡的MAC地址一样,无法使用,这时候需要修改网卡的MAC地址,且希望重启系统之后,仍生效的,步骤如下: 1. ...
- 在Linux下,在网络没有配置好前,怎样查看网卡的MAC地址?
在Linux下,在网络没有配置好前,怎样查看网卡的MAC地址? 使用 dmesg 与 grep 命令来实际,例如以下: [root@localhost ~]# dmesg | grep eth e10 ...
随机推荐
- hexo静态博客的安装及应用实践记录
1. 必须要安装 nodejs,git 2. 安装hexo node install -g hexo 3. npm源的问题使在安装时有卡住的问题而导致无法安装,则需要更改npm的源 npm confi ...
- 电子印章在Odoo的实现步骤
1. 首先用PS制作一个电子印章,具体步骤可参考 http://www.jb51.net/photoshop/173568.html 2. 给Odoo中的pdf添加印章的原理,就是利用Odoo的QWe ...
- rfid 125khz
环境是STVD V4.1.6, 编译器是COSMIC STM8 C Compiler 16K ,Version: 4.3.1 调用的库有:GPIO,TIM2 相关宏定义: //RF数据引脚 #defi ...
- tar包解压后用户名改变
最近开发项目时在PC上wang用户及组下打包的tar包解压到嵌入式设备root用户下,文件目录及文件用户名改为dbus和dbus组,导致cron等应用异常. 出现此问题时可以通过修改相应文件(件)的用 ...
- linux 常见错误
yum.pid 已被锁定 rm -rf /var/run/yum.pid
- js if判断 遍历 替换图片地质
<script> $(document).ready(function() { var s = "The rain in Spain falls mainly in the pl ...
- hash模块 hashlib不可逆加密 和 base64算法加密解密
hashlib模块 用于加密相关的操作,代替md5模块和sha模块,主要提供SHA1,SHA224,SSHA256,SHA384,SHA512,MD5算法 直接看代码案例: ---------md5- ...
- 你对linux了解多少,Linux 系统结构详解!
最近一直有人在请教老K关于Linux系统相关问题,这里我就该问题做个详解,Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序. 内核.shell和文件系统一起形成了基本的操作系统结 ...
- http 状态码 40x
400 无法解析此请求. 401.1 未经授权:访问由于凭据无效被拒绝. 401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝. 401.3 未经授权:访问由于 ACL 对所请求 ...
- 嵌入式驱动开发之内核态spi ---module_spi_driver
http://blog.csdn.net/dearsq/article/details/51839083 http://blog.csdn.net/alleincao/article/details/ ...