使用WinPcap获取网卡MAC地址
关键字:WinPcap 网卡 MAC地址
作者:txw1958
在WpdPack_4_1_2\WpdPack\Examples-remote\PacketDriver\GetMacAddress\目录下有获取MAC地址源文件
GetMacAddress.c
1: /*
2: * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
3: * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
4: * All rights reserved.
5: *
6: * Redistribution and use in source and binary forms, with or without
7: * modification, are permitted provided that the following conditions
8: * are met:
9: *
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: * 3. Neither the name of the Politecnico di Torino, CACE Technologies
16: * nor the names of its contributors may be used to endorse or promote
17: * products derived from this software without specific prior written
18: * permission.
19: *
20: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31: *
32: */
33:
34: #include <stdio.h>
35: #include <conio.h>
36: #include "..\..\..\Include\packet32.h"
37: #include "..\..\..\Include\ntddndis.h"
38: #define Max_Num_Adapter 10
39: char AdapterList[Max_Num_Adapter][1024];
40:
41: int main()
42: {
43: LPADAPTER lpAdapter = 0;
44: int i;
45: DWORD dwErrorCode;
46: char AdapterName[8192];
47: char *temp,*temp1;
48: int AdapterNum=0,Open;
49: ULONG AdapterLength;
50: PPACKET_OID_DATA OidData;
51: BOOLEAN Status;
52:
53: //
54: // Obtain the name of the adapters installed on this machine
55: //
56:
57: printf("Packet.dll test application. Library version:%s\n", PacketGetVersion());
58:
59: printf("Adapters installed:\n");
60: i=0;
61:
62: AdapterLength = sizeof(AdapterName);
63:
64: if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){
65: printf("Unable to retrieve the list of the adapters!\n");
66: return -1;
67: }
68: temp=AdapterName;
69: temp1=AdapterName;
70:
71: while ((*temp!='\0')||(*(temp-1)!='\0'))
72: {
73: if (*temp=='\0')
74: {
75: memcpy(AdapterList[i],temp1,temp-temp1);
76: temp1=temp+1;
77: i++;
78: }
79: temp++;
80: }
81:
82: AdapterNum=i;
83: for (i=0;i<AdapterNum;i++)
84: printf("\n%d- %s\n",i+1,AdapterList[i]);
85: printf("\n");
86:
87:
88: do
89: {
90: printf("Select the number of the adapter to open : ");
91: scanf("%d",&Open);
92: if (Open>AdapterNum) printf("\nThe number must be smaller than %d",AdapterNum);
93: } while (Open>AdapterNum);
94:
95:
96: //
97: // Open the selected adapter
98: //
99:
100: lpAdapter = PacketOpenAdapter(AdapterList[Open-1]);
101:
102: if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE))
103: {
104: dwErrorCode=GetLastError();
105: printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode);
106:
107: return -1;
108: }
109:
110: //
111: // Allocate a buffer to get the MAC adress
112: //
113:
114: OidData = malloc(6 + sizeof(PACKET_OID_DATA));
115: if (OidData == NULL)
116: {
117: printf("error allocating memory!\n");
118: PacketCloseAdapter(lpAdapter);
119: return -1;
120: }
121:
122: //
123: // Retrieve the adapter MAC querying the NIC driver
124: //
125:
126: OidData->Oid = OID_802_3_CURRENT_ADDRESS;
127:
128: OidData->Length = 6;
129: ZeroMemory(OidData->Data, 6);
130:
131: Status = PacketRequest(lpAdapter, FALSE, OidData);
132: if(Status)
133: {
134: printf("The MAC address of the adapter is %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
135: (PCHAR)(OidData->Data)[0],
136: (PCHAR)(OidData->Data)[1],
137: (PCHAR)(OidData->Data)[2],
138: (PCHAR)(OidData->Data)[3],
139: (PCHAR)(OidData->Data)[4],
140: (PCHAR)(OidData->Data)[5]);
141: }
142: else
143: {
144: printf("error retrieving the MAC address of the adapter!\n");
145: }
146:
147: free(OidData);
148: PacketCloseAdapter(lpAdapter);
149: return (0);
150: }
151:
运行后获得mac地址
Packet.dll test application. Library version:4.0.0.1040
Adapters installed:
1- \Device\NPF_GenericDialupAdapter
2- \Device\NPF_{B797EC79-A74B-40E4-96E7-0786726CC3C2}
3- \Device\NPF_{B513B814-5657-417F-B515-965AEAC13B83}
Select the number of the adapter to open : 2
The MAC address of the adapter is 02:ff:54:55:4e:01
使用WinPcap获取网卡MAC地址的更多相关文章
- Python 获取 网卡 MAC 地址
/*********************************************************************** * Python 获取 网卡 MAC 地址 * 说明: ...
- php获取网卡MAC地址源码
<?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $return_array = ...
- 转: 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
最近由于项目的需要,需要在程序中获取机器的硬盘序列号和MAC地址等信息,在C#下,可以很容易的获得这些信息,但是在C++程序中感觉比较麻烦.经过百度,发现很多大虾都是通过WMI来获取这些硬件信息的,网 ...
- windows平台下获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
转自http://blog.csdn.net/jhqin/article/details/5548656,如有侵权,请联系本人删除,谢谢!! 头文件:WMI_DeviceQuery.h /* ---- ...
- (转)通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
最近由于项目的需要,需要在程序中获取机器的硬盘序列号和MAC地址等信息,在C#下,可以很容易的获得这些信息,但是在C++程序中感觉比较麻烦.经过百度,发现很多大虾都是通过WMI来获取这些硬件信息的,网 ...
- 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号
转载:https://www.cnblogs.com/tlduck/p/5132738.html #define _WIN32_DCOM #include<iostream> #inclu ...
- matlab 获取网卡MAC地址
输入命令 [sta,MACres] = dos('getmac'); 其中MACres 存储的信息即为网卡的 相关信息. 如果想判断读取的网卡信息是否有指定信息可以如下输入 USER1 = strf ...
- 获取CPU序列号、网卡MAC地址、硬盘序列号
<pre name="code" class="csharp"> using System; using System.Collections; u ...
- 获取客户端网卡MAC地址和IP地址实现JS代码
获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载 获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...
随机推荐
- 问题:CListCtrl如何高亮选中一行 http://zhidao.baidu.com/question/100664911.html 扩展:单行、双行及完成状态的字体等等。。。
http://zhidao.baidu.com/link?url=BKp05mfOdKbEBh21svQelpVhYjzDkIpYUZay8_3ZLSndTQn5kK0eTwQG8jBvYnwh8US ...
- 【Debug】— C++ 表达式必须包含类类型
错误一般发生在使用.进行访问时,原因可能在于: 你以为你定义了一个类对象,其实你是声明了一个函数,在编译器看来: 对类对象指针采用.的方式访问其成员变量: 也包括基本类型变量,错误地使用. int a ...
- 详解HTML的a标签(超链接标签)
原文 简书原文:https://www.jianshu.com/p/d6a2499db73b 大纲 1.什么是<a>标签 2.<a>标签的几个重要属性 3.a标签的运行机制 4 ...
- POJ 1751 Highways (ZOJ 2048 ) MST
http://poj.org/problem?id=1751 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2048 题目大 ...
- POJ 1287 Networking (ZOJ 1372) MST
http://poj.org/problem?id=1287 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=372 和上次那题差 ...
- 今天竟然有人模仿我的QQ号进行骗钱
今天下午,CoderGeek同学告诉我,有个叫"小雷FansUnion"的QQ正在找他要钱,他直接和我这个正宗的"小雷FansUnion"探听虚实.这时才发现, ...
- php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)
php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误) 一.总结 要点:a.层次遍历(队列) b.层次遍历中的层次(孩 ...
- 卸载、指定卸载 .NET Core Runtime and SDK
原文:卸载.指定卸载 .NET Core Runtime and SDK 项目使用的 Nuget 包,比如 Microsoft.AspNetCore.App等的版本号要与 .NET Core 版本号( ...
- Docker入门之 - 更换源为国内源,实现快速下载image
原文:Docker入门之 - 更换源为国内源,实现快速下载image 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012055638/artic ...
- [Compose] 11. Use Task for Asynchronous Actions
We refactor a standard node callback style workflow into a composed task-based workflow. For example ...