From 0a90e6aedc520e22a4b30c5136cf8e195f73ed37 Mon Sep 17 00:00:00 2001 From: Just Call Me Koko Date: Fri, 19 May 2023 16:19:45 -0400 Subject: [PATCH] Fix open files when SD disable --- esp32_marauder/SDInterface.cpp | 4 +- esp32_marauder/SDInterface.h | 2 + esp32_marauder/WiFiScan.cpp | 106 +++++++++++++++++++++++---------- 3 files changed, 81 insertions(+), 31 deletions(-) diff --git a/esp32_marauder/SDInterface.cpp b/esp32_marauder/SDInterface.cpp index 13ee872..bfcd1ce 100644 --- a/esp32_marauder/SDInterface.cpp +++ b/esp32_marauder/SDInterface.cpp @@ -76,9 +76,11 @@ void SDInterface::addPacket(uint8_t* buf, uint32_t len) { } void SDInterface::openCapture(String file_name) { - if (this->supported) + bool save_pcap = settings_obj.loadSetting("SavePCAP"); + if ((this->supported) && (save_pcap)) { buffer_obj.createPcapFile(&SD, file_name); buffer_obj.open(); + } } void SDInterface::runUpdate() { diff --git a/esp32_marauder/SDInterface.h b/esp32_marauder/SDInterface.h index da0f94c..7477460 100644 --- a/esp32_marauder/SDInterface.h +++ b/esp32_marauder/SDInterface.h @@ -3,6 +3,7 @@ #include "configs.h" +#include "settings.h" #include "SD.h" #include "Buffer.h" #ifdef HAS_SCREEN @@ -11,6 +12,7 @@ #include extern Buffer buffer_obj; +extern Settings settings_obj; #ifdef HAS_SCREEN extern Display display_obj; #endif diff --git a/esp32_marauder/WiFiScan.cpp b/esp32_marauder/WiFiScan.cpp index 690c164..f6fd2c4 100644 --- a/esp32_marauder/WiFiScan.cpp +++ b/esp32_marauder/WiFiScan.cpp @@ -301,7 +301,7 @@ void WiFiScan::StartScan(uint8_t scan_mode, uint16_t color) else if (scan_mode == WIFI_SCAN_AP) RunBeaconScan(scan_mode, color); else if (scan_mode == WIFI_SCAN_SIG_STREN) - RunBeaconScan(scan_mode, color); + RunRawScan(scan_mode, color); else if (scan_mode == WIFI_SCAN_RAW_CAPTURE) RunRawScan(scan_mode, color); else if (scan_mode == WIFI_SCAN_STATION) @@ -2162,6 +2162,8 @@ void WiFiScan::stationSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t typ void WiFiScan::rawSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) { + extern WiFiScan wifi_scan_obj; + wifi_promiscuous_pkt_t *snifferPacket = (wifi_promiscuous_pkt_t*)buf; WifiMgmtHdr *frameControl = (WifiMgmtHdr*)snifferPacket->payload; wifi_pkt_rx_ctrl_t ctrl = (wifi_pkt_rx_ctrl_t)snifferPacket->rx_ctrl; @@ -2177,41 +2179,85 @@ void WiFiScan::rawSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type) const WifiMgmtHdr *hdr = &ipkt->hdr; } - Serial.print("RSSI: "); - Serial.print(snifferPacket->rx_ctrl.rssi); - Serial.print(" Ch: "); - Serial.print(snifferPacket->rx_ctrl.channel); - Serial.print(" BSSID: "); - char addr[] = "00:00:00:00:00:00"; - getMAC(addr, snifferPacket->payload, 10); - Serial.print(addr); - display_string.concat(text_table4[0]); - display_string.concat(snifferPacket->rx_ctrl.rssi); + if (wifi_scan_obj.currentScanMode == WIFI_SCAN_SIG_STREN) { + bool found = false; + uint8_t targ_index = 0; + AccessPoint targ_ap; - display_string.concat(" "); - display_string.concat(addr); - - int temp_len = display_string.length(); - - #ifdef HAS_SCREEN - for (int i = 0; i < 40 - temp_len; i++) - { - display_string.concat(" "); + // Check list of APs + for (int i = 0; i < access_points->size(); i++) { + if (access_points->get(i).selected) { + uint8_t addr[] = {snifferPacket->payload[10], + snifferPacket->payload[11], + snifferPacket->payload[12], + snifferPacket->payload[13], + snifferPacket->payload[14], + snifferPacket->payload[15]}; + // Compare AP bssid to ssid of recvd packet + for (int x = 0; x < 6; x++) { + if (addr[x] != access_points->get(i).bssid[x]) { + found = false; + break; + } + else + found = true; + } + if (found) { + //Serial.println("Received beacon from " + access_points->get(i).essid + ". Checking RSSI..."); + targ_ap = access_points->get(i); + targ_index = i; + break; + } + } } + if (!found) + return; - Serial.print(" "); - - if (display_obj.display_buffer->size() == 0) - { - display_obj.loading = true; - display_obj.display_buffer->add(display_string); - display_obj.loading = false; + if ((targ_ap.rssi + 5 < snifferPacket->rx_ctrl.rssi) || (snifferPacket->rx_ctrl.rssi + 5 < targ_ap.rssi)) { + targ_ap.rssi = snifferPacket->rx_ctrl.rssi; + access_points->set(targ_index, targ_ap); + Serial.println((String)access_points->get(targ_index).essid + " RSSI: " + (String)access_points->get(targ_index).rssi); + return; } - #endif + } - Serial.println(); + else { + Serial.print("RSSI: "); + Serial.print(snifferPacket->rx_ctrl.rssi); + Serial.print(" Ch: "); + Serial.print(snifferPacket->rx_ctrl.channel); + Serial.print(" BSSID: "); + char addr[] = "00:00:00:00:00:00"; + getMAC(addr, snifferPacket->payload, 10); + Serial.print(addr); + display_string.concat(text_table4[0]); + display_string.concat(snifferPacket->rx_ctrl.rssi); - addPacket(snifferPacket, len); + display_string.concat(" "); + display_string.concat(addr); + + int temp_len = display_string.length(); + + #ifdef HAS_SCREEN + for (int i = 0; i < 40 - temp_len; i++) + { + display_string.concat(" "); + } + + Serial.print(" "); + + if (display_obj.display_buffer->size() == 0) + { + display_obj.loading = true; + display_obj.display_buffer->add(display_string); + display_obj.loading = false; + } + #endif + + Serial.println(); + + addPacket(snifferPacket, len); + } } void WiFiScan::deauthSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)