Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 63 additions & 2 deletions esp8266_packet_monitor/esp8266_packet_monitor.ino
Original file line number Diff line number Diff line change
@@ -1,13 +1,38 @@
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#else
#include <WiFi.h>
#endif
#include <Wire.h>
#include <EEPROM.h>

#include "SSD1306.h"
#include "SH1106.h"

#if defined(ESP8266)
extern "C" {
#include "user_interface.h"
}
#else
#include "esp_wifi.h"
const wifi_promiscuous_filter_t filt={
.filter_mask=WIFI_PROMIS_FILTER_MASK_MGMT|WIFI_PROMIS_FILTER_MASK_DATA
};

typedef struct {
uint8_t mac[6];
} __attribute__((packed)) MacAddr;

typedef struct {
int16_t fctl;
int16_t duration;
MacAddr da;
MacAddr sa;
MacAddr bssid;
int16_t seqctl;
unsigned char payload[];
} __attribute__((packed)) WifiMgmtHdr;
#endif

//===== SETTINGS =====//
//create display(Adr, SDA-pin, SCL-pin)
Expand Down Expand Up @@ -35,11 +60,30 @@ bool canBtnPress = true;

int val[128];

#if defined(ESP8266)
void sniffer(uint8_t *buf, uint16_t len) {
#else
void sniffer(void* buf, wifi_promiscuous_pkt_type_t type) {
#endif
pkts++;
#if defined(ESP8266)
if(buf[12] == 0xA0 || buf[12] == 0xC0){
deauths++;
}
#else
if (type == WIFI_PKT_MGMT) {
wifi_promiscuous_pkt_t *p = (wifi_promiscuous_pkt_t*)buf;
int len = p->rx_ctrl.sig_len;
WifiMgmtHdr *wh = (WifiMgmtHdr*)p->payload;
len -= sizeof(WifiMgmtHdr);
if (len < 0) return;
int fctl = ntohs(wh->fctl);
if (fctl & 0x0F00 == 0x0A00 || fctl & 0x0F00 == 0x0C00) {
deauths++;
Serial.println("DEAUTH:");
}
}
#endif
}

void getMultiplicator(){
Expand Down Expand Up @@ -85,13 +129,26 @@ void setup() {
pinMode(ledPin, OUTPUT);

/* setup wifi */
#if defined(ESP8266)
wifi_set_opmode(STATION_MODE);
wifi_promiscuous_enable(0);
WiFi.disconnect();
wifi_set_promiscuous_rx_cb(sniffer);
wifi_set_channel(curChannel);
wifi_promiscuous_enable(1);

#else
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
esp_wifi_set_country(WIFI_COUNTRY_EU);
esp_wifi_set_storage(WIFI_STORAGE_RAM);
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_start();
esp_wifi_set_promiscuous(true);
esp_wifi_set_promiscuous_filter(&filt);
esp_wifi_set_promiscuous_rx_cb(&sniffer);
esp_wifi_set_channel(curChannel, WIFI_SECOND_CHAN_NONE);
#endif

Serial.println("starting!");
}

Expand All @@ -108,7 +165,11 @@ void loop() {
//switch channel
curChannel++;
if(curChannel > maxCh) curChannel = 1;
#if defined(ESP8266)
wifi_set_channel(curChannel);
#else
esp_wifi_set_channel(curChannel, WIFI_SECOND_CHAN_NONE);
#endif
for(int i=0;i<128;i++) val[i] = 0;
pkts = 0;
multiplicator = 1;
Expand Down Expand Up @@ -152,4 +213,4 @@ void loop() {
pkts = 0;
}

}
}