zoukankan      html  css  js  c++  java
  • 使用WinPcap获取网卡MAC地址

    关键字:WinPcap 网卡 MAC地址

    作者:txw1958

    在WpdPack_4_1_2WpdPackExamples-remotePacketDriverGetMacAddress目录下有获取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 "......Includepacket32.h" 
     37: #include "......Include
    tddndis.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
    ", PacketGetVersion()); 
     58:      
     59:     printf("Adapters installed:
    "); 
     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!
    "); 
     66:         return -1; 
     67:     } 
     68:     temp=AdapterName; 
     69:     temp1=AdapterName; 
     70:  
     71:     while ((*temp!='')||(*(temp-1)!='')) 
     72:     { 
     73:         if (*temp=='')  
     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("
    %d- %s
    ",i+1,AdapterList[i]); 
     85:     printf("
    "); 
     86:  
     87:  
     88:     do  
     89:     { 
     90:         printf("Select the number of the adapter to open : "); 
     91:         scanf("%d",&Open); 
     92:         if (Open>AdapterNum) printf("
    The 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
    ",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!
    "); 
    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
    ", 
    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!
    "); 
    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- DeviceNPF_GenericDialupAdapter

    2- DeviceNPF_{B797EC79-A74B-40E4-96E7-0786726CC3C2}

    3- DeviceNPF_{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

  • 相关阅读:
    两元素交换(不借用第三个元素)
    魔兽系统
    员工打卡
    NET框架
    jQuery测试
    Android屏幕适配终结者
    android-auto-scroll-view-pager (无限广告轮播图)
    AndroidImageSlider(图片轮播控件)
    PagerSlidingTabStrip(viewPage滑动菜单)
    怎样把淘宝的数据转到拍拍上
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468757.html
Copyright © 2011-2022 走看看