我正在尝试为此处看到的 DSIKE ESP8266 取消身份验证攻击检测器 ESP12N 编译脚本:
脚本deauth 检测器,当检测到攻击时,它会在蜂鸣器上播放“加勒比海盗”主题曲。我想改为播放星球大战中的“帝国进行曲”歌曲,但我 基本上我需要帮助将这两个脚本粉碎在一起。
这是原始的 deauth 检测器 .ino:
// 此软件已根据 MIT 许可证获得许可。
// 有关详细信息,请参阅许可证文件。
// 有关更多详细信息,请访问 github.com/spacehuhn/DeauthDetector
// 包括必要的库
#include // 对于 WiFi 嗅探器
#include // 对于 Neopixel/WS2812 LED
/ / include ESP8266 Non-OS SDK func
tions
extern \"C\" {
#include \"user_interface.h\"
}
// ===== SETTINGS ===== //
#define LED 4 /* LED pin */
#define LED_NUM 1 /* LED 数量 */
#define BUZZER 5 /* 蜂鸣器引脚 */
#define SPEED 1.5 /* 歌曲速度,数字越大歌曲越慢 */
#define SERIAL_BAUD 115200 /* 串口
通信波特率 */
#define CH_TIME 140 /* 每通道扫描时间(毫秒) */
#define PKT_RATE 5分钟。在它被识别为攻击之前的数据包 */
#define PKT_TIME 1 /* Min. 在它被识别为攻击之前的间隔 (CH_TIME*CH_RANGE) */
// 要扫描的频道 (US=1-11, EU=1-13, JAP=1-14)
const short channels[] { 1,2, 3,4,5,6,7,8,9,10,11,12,13/*,14*/ };
// ===== 运行时变量 ===== //
Adafruit_NeoPixel 像素 { LED_NUM, LED, NEO_GRB + NEO_KHZ800 }; // Neopixel LED
bool song_playing { false }; // 如果正在播放歌曲
int note_index { 0 }; // 当前正在播放的音符索引
int note_time { 0 }; // 一个音符播放的时间量(毫秒)
int ch_index { 0 }; // 通道数组的当前索引
int packet_rate { 0 }; // Deauth 数据包计数器(每次更新都会重置)
int attack_counter { 0 }; // 攻击计数器
unsigned long update_time { 0 }; // 最后更新时间
unsigned long ch_time { 0 }; // 最后一个频道跳转时间
unsigned long song_time { 0 }; // 最后一首歌更新
// ===== Notes ===== //
// 借用 <3 来自这里: https:
//github.com/xitangg/-Pirates-of- ... Theme-Song #define NOTE_C4 262 #define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_D5 587 #define
NOTE_E5 659 #define NOTE_F5 698
#define NOTE_G5 784 #define
NOTE_A5 880 #定义NOTE_B5 988 int 注释[] { NOTE_E4,NOTE_G4,NOTE_A4,NOTE_A4,0, NOTE_A4,NOTE_B4,NOTE_C5,NOTE_C5,0,NOTE_C5,NOTE_D5,NOTE_B4,NOTE_B4,0,NOTE_A4,NOTE_G4,NOTE_A4,0 , NOTE_E4, NOTE_G4,NOTE_A4,NOTE_A4,0 , NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0, NOTE_A4, NOTE_G4, NOTE_A4, 0,
注_E4、注_G4、注_A4、注_A4、0、注
_A4、注_C5、注_D5、注_D5、0、注_D5、注_E5、注_F5、注_F5、0、注_E5、注_D5、注_E5、注
_A4、0、注_A4、注_B4、注_C5
、注
_C5、0、
注_D5、注_E5、注_A4、0、注
_A4、注_C5、注_B4、注_B4、0、注_C5、注_A4、注_B4、0、注_A4、注_A4、注_A4、注_B4、注_C5、注_C5、0、注_C5、注_D5 、注_B4
、注
_B4、0 、 注_A4、注_G4、注_A4、0、注_E4、注_G4、注 _A4、注_A4、0、注_A4、注_B4、注_C5、注_C5、0、注_C5、注_D5、注_B4、注_B4、0、注_A4、注_G4 、 注 _A4、0、
注_E4、注_G4、注_A4、注_A4、0、注
_A4、注_C5、注_D5、注_D5、0、注_D5、注_E5、注_F5、注_F5、0、注_E5、注_D5、注_E5、注
_A4、0、注_A4、注_B4、注_C5
、注
_C5、0、
注_D5、注_E5、注_A4、0、注_A4、注
_C5、注_B4、注_B4、0、注_C5、注_A4、注_B4、0、注_E5、0、0、注_F5、0、0、注_E5、注_E5、0、注 _G5、0
、 注_E5、注_D5、0、0、注_D5、0、0、注 _C5、0、0、注_B4、注_C5、0、注_B4、0、注_A4、注_E5、0、0、注 _F5、0、0、注_E5、注_E5、0、注 _G5 、 0, NOTE_E5, NOTE_D5, 0, 0, NOTE_D5, 0, 0, NOTE_C5, 0, 0, NOTE_B4, NOTE_C5, 0, NOTE_B4, 0, NOTE_A4
};
int duration[] {
125, 125, 250, 125, 125, 125,
125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125,
375
, 125, 125
, 125, 250, 125 , 125,
125, 125, 250, 125, 125, 125, 125
, 250, 125, 125, 125, 125,
375, 125, 125, 125, 250, 125, 125
, 125, 125,
250, 125, 125 ,
125, 125, 250, 125, 125,
125, 125, 125, 250, 125, 125, 125, 250, 125, 125, 250, 125, 250, 125, 125, 125, 250
,
125
, 125,
125
,125、375、375、250、125、125、125、250、125、125、125、125、125、250、125、125、125、125、125、375、125、125、125、125、125、125、250、250、250、125、125、125、125、125、125、125、125、125
_
_
_
_
125, 125, 250, 125, 125, 125
, 125, 250, 125, 125, 125, 125,
375, 125, 125, 125, 250, 125, 125, 125, 125
,
250, 125, 125, 1 25
, 125, 250, 125, 125, 125
, 125, 125, 250, 125, 125, 125,
250, 125, 125, 250, 125, 250, 125, 125, 125, 250, 125
,
125, 125, 1
25, 375, 375,
250, 125, 375, 250, 125, 375, 125
, 125, 125, 125, 125, 125, 125, 125, 375, 250, 125, 375, 250, 125, 375, 125, 1
25
, 125, 125, 125, 500,
250, 125, 375, 250, 125, 375, 125, 125, 125, 125, 125, 125, 125, 125, 375, 250, 125
, 375,
250, 125, 3 75,
125, 125, 125, 125, 125, 500
};
// ===== 嗅探器函数 ===== //
void sniffer(uint8_t *buf, uint16_t len) {
如果 (!buf || len < 28) 返回; // 丢弃没有 MAC 头字节的
数据包 pkt_type = buf[12]; // 帧控制字段的后半部分
//byte* addr_a = &buf[16]; // 第一个 MAC 地址
//byte* addr_b = &buf[22]; // 第二个 MAC 地址
// 如果捕获的数据包是取消身份验证或解除关联的帧
if (pkt_type == 0xA0 || pkt_type == 0xC0) {
++packet_rate;
}
}
// ===== 攻击检测函数 ===== //
void attack_started() {
song_playing = true;
note_index = 0;
note_time = duration[note_index] * SPEED;
for(int i=0; i= (sizeof(channels)*CH_TIME)) {
update_time = current_time; // 更新时间变量
// 当检测到的 deauth 数据包超过最小允许数量时
if (packet_rate >= PKT_RATE) {
++attack_counter; // 增加攻击计数器
} else {
if(attack_counter >= PKT_TIME) attack_stopped();
攻击计数器= 0;// 重置攻击计数器
}
// 当攻击超过最小允许时间时
if (attack_counter == PKT_TIME) {
attack_started();
}
Serial.print(\"数据包/s:\");
Serial.println(packet_rate);
packet_rate = 0; // 重置数据包速率
}
// 频道跳频
if (sizeof(channels) > 1 && current_time - ch_time >= CH_TIME) {
ch_time = 当前时间;// 更新时间变量
// 获取下一个通道
ch_index = (ch_index+1) % (sizeof(channels)/sizeof(channels[0]));
短 ch = 通道 [ch_index];
// 设置频道
//Serial.print(\"Set channel to \");
//序列号.println(ch);
wifi_set_channel(ch);
}
if(song_playing && current_time - song_time >= note_time) {
song_time = current_time;
note_index = (note_index+1) % (sizeof(notes)/sizeof(notes[0]));
note_time = duration[note_index] * SPEED;
音调(蜂鸣器,音符[note_index],note_time);
}
}
这是星球大战歌曲 .ino:
// ===== Notes ===== //
const int c = 261;
const int d = 294;
const int e = 329;
const int f = 349;
常数 int g = 391;
const int gS = 415;
const int a = 440;
const int aS = 455;
常量 b = 466;
const int cH = 523;
常量 int cSH = 554;
const int dH = 587;
const int dSH = 622;
const int eH = 659;
常量 fH = 698;
常量 fSH = 740;
const int gH = 784;
常数 int gSH = 830;
const int aH = 880;
const int buzzerPin = 5;
const int ledPin1 = 12;
const int ledPin2 = 13;
整数计数器= 0;
void setup()
{
//设置引脚模式
pinMode(buzzerPin, OUTPUT);
引脚模式(ledPin1,输出);
引脚模式(ledPin2,输出);
}
void loop()
{
//播放第一节
firstSection();
//播放第二节
secondSection();
//变体 1
哔哔声 (f, 250);
哔哔声(gS,500);
嘟嘟声(f,350);
嘟嘟声(一,125);
哔哔声(cH,500);
嘟嘟声(a,375);
哔哔声(cH,125);
嘟嘟声(eH,650);
延迟(500);
//重复第二节
secondSection();
//变体 2
哔哔声 (f, 250);
哔哔声(gS,500);
嘟嘟声(女,375);
哔哔声(cH,125);
嘟嘟声(一,500);
嘟嘟声(女,375);
哔哔声(cH,125);
嘟嘟声(一,650);
延迟(650);
}
void beep(int note, int duration)
{
//在buzzerPin上播放音调 tone
(buzzerPin, note, duration);
//buzzerPin 上的停止音
noTone(buzzerPin);
延迟(50);
//递增计数器
counter++;
}
void firstSection()
{
哔哔声 (a, 500);
嘟嘟声(一,500);
嘟嘟声(一,500);
嘟嘟声(f,350);
哔哔声(cH,150);
嘟嘟声(一,500);
嘟嘟声(f,350);
哔哔声(cH,150);
嘟嘟声(一,650);
延迟(500);
嘟嘟声(eH,500);
嘟嘟声(eH,500);
嘟嘟声(eH,500);
嘟嘟声(fH,350);
哔哔声(cH,150);
哔哔声(gS,500);
嘟嘟声(f,350);
哔哔声(cH,150);
嘟嘟声(一,650);
延迟(500);
}
void secondSection()
{
哔哔声 (aH, 500);
嘟嘟声(一,300);
嘟嘟声(一,150);
嘟嘟声(aH,500);
嘟嘟声(gSH,325);
哔哔声(gH,175);
嘟嘟声(fSH,125);
嘟嘟声(fH,125);
嘟嘟声(fSH,250);
延迟(325);
嘟嘟声(aS,250);
嘟嘟声(dSH,500);
嘟嘟声(dH,325);
嘟嘟声(cSH,175);
哔哔声(cH,125);
嘟嘟声(b,125);
哔哔声(cH,250);
延迟(350);
}