关键字: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. js中退出语句break,continue和return 比较 (转)

    在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 首先:break和continue两个一 ...

  2. Auto Layout深入理解,及masonry简单介绍

    本篇博客是本人在学习自己主动布局过程中对自己主动布局的理解和整理,分三部分介绍,内容可能会有所反复.见谅. 一.autosizing与Auto Layout对照,及Auto Layout简单介绍 1. ...

  3. jquery-12 jquery中的工具方法有哪些

    jquery-12 jquery中的工具方法有哪些 一.总结 一句话总结:四个较常用方法.1.isArray();2.isFunction();3.isEmptyObejct();4.trim(); ...

  4. 一次svn数据库的崩溃错误的解决

    作者:朱金灿 来源:. 然后再更新svn数据库,依然出现上面提到的错误.于是又想到新建一个svn数据库,然后将旧库备份出来再导入到新库中,运行命令:svnadmin dump E:\Repositor ...

  5. jquery-11 如何制作鼠标右键菜单

    jquery-11 如何制作鼠标右键菜单 一.总结 一句话总结:核心原理:找到右键菜单事件contextmenu,return false去掉默认事件,然后判断用户是否点的右键,然后在鼠标的位置显示菜 ...

  6. 有关下拉列表、复选框、单选按钮、iframe等jquery处理方法

    1.jquery验证复选框互斥选项,代码如下: //验证复选框中的互斥选项 function checkData(name, val1, val2){ //获取所有checkbox值 var chec ...

  7. svn pre commit

    windows下的必须要用.bat文件,pre-commit.bat ================================================== @echo off set ...

  8. 【42%】【hdu1166】排兵布阵(树状数组解法&&线段树解法)

    Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...

  9. [React Native] Writing Platform-Specific Components for iOS and Android in React Native

    Learn to write components that render differently on iOS and Android, but present the same API. Firs ...

  10. thinkphp5开发规范(加强复习之前的)

    thinkphp5开发规范(加强复习之前的) 一.总结 一句话总结:和类相关的采用驼峰命名法:变量,函数,类,方法,属性采用驼峰命名发:数据库及文件及配置参数是小写字母加下划:常量大写加下划线 1.T ...