关键字: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. [LeetCode][Java] Letter Combinations of a Phone Number

    题目: Given a digit string, return all possible letter combinations that the number could represent. A ...

  2. 线程堆栈大小 pthread_attr_setstacksize 的使用

    pthread_create 创建线程时,若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下: # ulimit -s8192# 上述表示为8M:单位为KB. 也可以通过# ulimit -a ...

  3. 如何在电脑上播放iso映像文件

    http://blog.sina.com.cn/s/blog_4a20485e0102e5ya.html

  4. 从Ecipse中导出程序至apk 分类: H1_ANDROID 2013-10-26 22:17 516人阅读 评论(0) 收藏

    若未有数字证书: 1. 2. 3. 4. 5. 若已有数字证书: 上面的后3步改为 版权声明:本文为博主原创文章,未经博主允许不得转载.

  5. 图像数据的 normalization

    Normalization的方法 matlab 工具函数(三)-- normalize(归一化数据) 1. 加载指定标准差的噪声 im_clean = double(imread('Lena512.p ...

  6. JavaEE分层知识点粗略解释

    JavaEE知识点总结 什么是分层开发? 一种化大为小,分而治之的软件开发方法. 分层的特点: 1.每一层都有自己的责任. 2.上一层不用关心下一层的实现细节,上一层通过下一层 提供的对外接口来使用其 ...

  7. [Angular] Angular CLI

    Create an app with routing config: ng new mynewapp --routing If you want to generate a new module wi ...

  8. SpringMVC ModelAndView跳转失效

    今天隔壁的兄弟遇到一个奇怪的问题,他写好了一个表单用post提交到了addNew.do 里面,然后利用 return new ModelAndView("forward:success.js ...

  9. [Ramda] Create a Query String from an Object using Ramda's toPairs function

    In this lesson, we'll use Ramda's toPairs function, along with map, join, concatand compose to creat ...

  10. PhpStorm常用快捷键(不多够用)

    PhpStorm常用快捷键(不多够用) 一.总结 一句话总结: 1.前进 解答:Ctrl+shift+ z 2.跳转到指定行数 解答:Ctrl+G 3.块注释 解答:ctrl + shift + / ...