关键字: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地址的更多相关文章

  1. Python 获取 网卡 MAC 地址

    /*********************************************************************** * Python 获取 网卡 MAC 地址 * 说明: ...

  2. php获取网卡MAC地址源码

    <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $return_array = ...

  3. 转: 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号

    最近由于项目的需要,需要在程序中获取机器的硬盘序列号和MAC地址等信息,在C#下,可以很容易的获得这些信息,但是在C++程序中感觉比较麻烦.经过百度,发现很多大虾都是通过WMI来获取这些硬件信息的,网 ...

  4. windows平台下获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号

    转自http://blog.csdn.net/jhqin/article/details/5548656,如有侵权,请联系本人删除,谢谢!! 头文件:WMI_DeviceQuery.h /* ---- ...

  5. (转)通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号

    最近由于项目的需要,需要在程序中获取机器的硬盘序列号和MAC地址等信息,在C#下,可以很容易的获得这些信息,但是在C++程序中感觉比较麻烦.经过百度,发现很多大虾都是通过WMI来获取这些硬件信息的,网 ...

  6. 通过WMI获取网卡MAC地址、硬盘序列号、主板序列号、CPU ID、BIOS序列号

    转载:https://www.cnblogs.com/tlduck/p/5132738.html #define _WIN32_DCOM #include<iostream> #inclu ...

  7. matlab 获取网卡MAC地址

    输入命令 [sta,MACres] =  dos('getmac'); 其中MACres 存储的信息即为网卡的 相关信息. 如果想判断读取的网卡信息是否有指定信息可以如下输入 USER1 = strf ...

  8. 获取CPU序列号、网卡MAC地址、硬盘序列号

    <pre name="code" class="csharp"> using System; using System.Collections; u ...

  9. 获取客户端网卡MAC地址和IP地址实现JS代码

    获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载   获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...

随机推荐

  1. 问题:CListCtrl如何高亮选中一行 http://zhidao.baidu.com/question/100664911.html 扩展:单行、双行及完成状态的字体等等。。。

    http://zhidao.baidu.com/link?url=BKp05mfOdKbEBh21svQelpVhYjzDkIpYUZay8_3ZLSndTQn5kK0eTwQG8jBvYnwh8US ...

  2. 【Debug】— C++ 表达式必须包含类类型

    错误一般发生在使用.进行访问时,原因可能在于: 你以为你定义了一个类对象,其实你是声明了一个函数,在编译器看来: 对类对象指针采用.的方式访问其成员变量: 也包括基本类型变量,错误地使用. int a ...

  3. 详解HTML的a标签(超链接标签)

    原文 简书原文:https://www.jianshu.com/p/d6a2499db73b 大纲 1.什么是<a>标签 2.<a>标签的几个重要属性 3.a标签的运行机制 4 ...

  4. POJ 1751 Highways (ZOJ 2048 ) MST

    http://poj.org/problem?id=1751 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2048 题目大 ...

  5. POJ 1287 Networking (ZOJ 1372) MST

    http://poj.org/problem?id=1287 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=372 和上次那题差 ...

  6. 今天竟然有人模仿我的QQ号进行骗钱

    今天下午,CoderGeek同学告诉我,有个叫"小雷FansUnion"的QQ正在找他要钱,他直接和我这个正宗的"小雷FansUnion"探听虚实.这时才发现, ...

  7. php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)

    php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误) 一.总结 要点:a.层次遍历(队列)  b.层次遍历中的层次(孩 ...

  8. 卸载、指定卸载 .NET Core Runtime and SDK

    原文:卸载.指定卸载 .NET Core Runtime and SDK 项目使用的 Nuget 包,比如 Microsoft.AspNetCore.App等的版本号要与 .NET Core 版本号( ...

  9. Docker入门之 - 更换源为国内源,实现快速下载image

    原文:Docker入门之 - 更换源为国内源,实现快速下载image 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012055638/artic ...

  10. [Compose] 11. Use Task for Asynchronous Actions

    We refactor a standard node callback style workflow into a composed task-based workflow. For example ...