mirror of
https://github.com/justcallmekoko/ESP32Marauder.git
synced 2026-01-26 03:05:00 -08:00
Compare commits
75 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1767f76362 | ||
|
|
908aae7965 | ||
|
|
4127e4d3d0 | ||
|
|
cc4a069af3 | ||
|
|
dae7e19abe | ||
|
|
2a8006a59d | ||
|
|
f0d1c048f5 | ||
|
|
94a7c6c587 | ||
|
|
0a395944c6 | ||
|
|
00b27c8e87 | ||
|
|
065e931376 | ||
|
|
9b7d1ab31f | ||
|
|
593dd99d1a | ||
|
|
12794f57bc | ||
|
|
7c73689a13 | ||
|
|
20e70e9343 | ||
|
|
25567aca81 | ||
|
|
0ecc183b59 | ||
|
|
df5e495f3a | ||
|
|
aa5cb56b97 | ||
|
|
cd5d537373 | ||
|
|
868c8a85de | ||
|
|
d3299474c6 | ||
|
|
e662f917bc | ||
|
|
4004e4e6d0 | ||
|
|
cdae54be5a | ||
|
|
4dd856999f | ||
|
|
231d331ff7 | ||
|
|
1cc7b3f620 | ||
|
|
caecd09d74 | ||
|
|
3c5b3bd544 | ||
|
|
4d145d5c0b | ||
|
|
020d0ace3c | ||
|
|
6229ad6d2a | ||
|
|
649f619f87 | ||
|
|
695aed1710 | ||
|
|
76dd3f020d | ||
|
|
60d8a9004b | ||
|
|
84fc9738d4 | ||
|
|
ed65e6d2f7 | ||
|
|
fad44231cf | ||
|
|
974ed246dc | ||
|
|
960c66247d | ||
|
|
39b53e22ba | ||
|
|
1bc2b36c9c | ||
|
|
fe6ab68819 | ||
|
|
f4634638a9 | ||
|
|
e3f32106d9 | ||
|
|
1e5b083d14 | ||
|
|
46dafaa2e4 | ||
|
|
fab8088198 | ||
|
|
e16d421213 | ||
|
|
3ba30ec5d9 | ||
|
|
062cc320d3 | ||
|
|
22058ce83c | ||
|
|
43130cbb42 | ||
|
|
727397f537 | ||
|
|
a2722ea23b | ||
|
|
edbfd62e4c | ||
|
|
5207b18aff | ||
|
|
5d8fba14c1 | ||
|
|
7fd64995bb | ||
|
|
7efa7c8a12 | ||
|
|
6929e3547b | ||
|
|
92cd8933d1 | ||
|
|
78db6eb2d4 | ||
|
|
404ceb03ff | ||
|
|
d9356043bf | ||
|
|
ae8a93a6d2 | ||
|
|
038284c3be | ||
|
|
e394174803 | ||
|
|
e86c5e92e6 | ||
|
|
7827d64a7c | ||
|
|
bfe81f7325 | ||
|
|
584e9457dd |
5
.github/workflows/build_parallel.yml
vendored
5
.github/workflows/build_parallel.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Build and Push
|
||||
name: Build and Push Parallel
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
@@ -219,7 +219,7 @@ jobs:
|
||||
name: Create Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: [compile_sketch]
|
||||
if: ${{ github.ref_type == 'tag' }}
|
||||
if: ${{ github.event_name == 'workflow_dispatch' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/download-artifact@v4
|
||||
@@ -231,5 +231,6 @@ jobs:
|
||||
name: "Marauder Release ${{ github.ref_name }}"
|
||||
tag_name: ${{ github.ref_name }}
|
||||
generate_release_notes: true
|
||||
draft: true
|
||||
files: |
|
||||
esp32_marauder.*.bin
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -7,9 +7,10 @@
|
||||
#include "FS.h"
|
||||
#include "settings.h"
|
||||
#include "esp_wifi_types.h"
|
||||
#include "configs.h"
|
||||
|
||||
#define BUF_SIZE 3 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
|
||||
#define SNAP_LEN 2324 // max len of each recieved packet
|
||||
//#define BUF_SIZE 3 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
|
||||
//#define SNAP_LEN 2324 // max len of each recieved packet
|
||||
|
||||
//extern bool useSD;
|
||||
|
||||
|
||||
@@ -220,7 +220,9 @@ void CommandLine::runCommand(String input) {
|
||||
|
||||
// WiFi sniff/scan
|
||||
Serial.println(HELP_EVIL_PORTAL_CMD);
|
||||
Serial.println(HELP_PACKET_COUNT_CMD);
|
||||
Serial.println(HELP_SIGSTREN_CMD);
|
||||
Serial.println(HELP_SCAN_ALL_CMD);
|
||||
Serial.println(HELP_SCANAP_CMD);
|
||||
Serial.println(HELP_SCANSTA_CMD);
|
||||
Serial.println(HELP_SNIFF_RAW_CMD);
|
||||
@@ -239,6 +241,7 @@ void CommandLine::runCommand(String input) {
|
||||
Serial.println(HELP_ATTACK_CMD);
|
||||
|
||||
// WiFi Aux
|
||||
Serial.println(HELP_INFO_CMD);
|
||||
Serial.println(HELP_LIST_AP_CMD_A);
|
||||
Serial.println(HELP_LIST_AP_CMD_B);
|
||||
Serial.println(HELP_LIST_AP_CMD_C);
|
||||
@@ -520,6 +523,16 @@ void CommandLine::runCommand(String input) {
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_SIG_STREN, TFT_MAGENTA);
|
||||
wifi_scan_obj.renderPacketRate();
|
||||
}
|
||||
// Packet count
|
||||
else if (cmd_args.get(0) == PACKET_COUNT_CMD) {
|
||||
Serial.println("Starting Packet Count Scan. Stop with " + (String)STOPSCAN_CMD);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.clearScreen();
|
||||
menu_function_obj.drawStatusBar();
|
||||
#endif
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_PACKET_RATE, TFT_ORANGE);
|
||||
}
|
||||
// Wardrive
|
||||
else if (cmd_args.get(0) == WARDRIVE_CMD) {
|
||||
@@ -593,6 +606,10 @@ void CommandLine::runCommand(String input) {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cmd_args.get(0) == SCAN_ALL_CMD) {
|
||||
Serial.println("Scanning for APs and Stations. Stop with " + (String)STOPSCAN_CMD);
|
||||
wifi_scan_obj.StartScan(WIFI_SCAN_AP_STA, TFT_MAGENTA);
|
||||
}
|
||||
else if (cmd_args.get(0) == SCANAP_CMD) {
|
||||
int full_sw = -1;
|
||||
#ifdef HAS_SCREEN
|
||||
@@ -1189,6 +1206,21 @@ void CommandLine::runCommand(String input) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (cmd_args.get(0) == INFO_CMD) {
|
||||
int ap_sw = this->argSearch(&cmd_args, "-a");
|
||||
|
||||
if (ap_sw != -1) {
|
||||
int filter_ap = cmd_args.get(ap_sw + 1).toInt();
|
||||
wifi_scan_obj.RunAPInfo(filter_ap, false);
|
||||
}
|
||||
else {
|
||||
wifi_scan_obj.currentScanMode = SHOW_INFO;
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.changeMenu(&menu_function_obj.infoMenu);
|
||||
#endif
|
||||
wifi_scan_obj.RunInfo();
|
||||
}
|
||||
}
|
||||
// Select access points or stations
|
||||
else if (cmd_args.get(0) == SEL_CMD) {
|
||||
// Get switches
|
||||
@@ -1313,26 +1345,43 @@ void CommandLine::runCommand(String input) {
|
||||
// Get list of indices
|
||||
LinkedList<String> ss_index = this->parseCommand(cmd_args.get(ss_sw + 1), ",");
|
||||
|
||||
// Mark APs as selected
|
||||
for (int i = 0; i < ss_index.size(); i++) {
|
||||
int index = ss_index.get(i).toInt();
|
||||
if (!this->inRange(ssids->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
continue;
|
||||
// Select ALL SSIDs
|
||||
if (cmd_args.get(ss_sw + 1) == "all") {
|
||||
for (int i = 0; i < ssids->size(); i++) {
|
||||
if (ssids->get(i).selected) {
|
||||
ssid new_ssid = ssids->get(i);
|
||||
new_ssid.selected = false;
|
||||
ssids->set(i, new_ssid);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
ssid new_ssid = ssids->get(i);
|
||||
new_ssid.selected = true;
|
||||
ssids->set(i, new_ssid);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
if (ssids->get(index).selected) {
|
||||
// Unselect "selected" ap
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = false;
|
||||
ssids->set(index, new_ssid);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
// Select "unselected" ap
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = true;
|
||||
ssids->set(index, new_ssid);
|
||||
count_selected += 1;
|
||||
}
|
||||
else {
|
||||
// Mark SSIDs as selected
|
||||
for (int i = 0; i < ss_index.size(); i++) {
|
||||
int index = ss_index.get(i).toInt();
|
||||
if (!this->inRange(ssids->size(), index)) {
|
||||
Serial.println("Index not in range: " + (String)index);
|
||||
continue;
|
||||
}
|
||||
if (ssids->get(index).selected) {
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = false;
|
||||
ssids->set(index, new_ssid);
|
||||
count_unselected += 1;
|
||||
}
|
||||
else {
|
||||
ssid new_ssid = ssids->get(index);
|
||||
new_ssid.selected = true;
|
||||
ssids->set(index, new_ssid);
|
||||
count_selected += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
this->showCounts(count_selected, count_unselected);
|
||||
|
||||
@@ -54,7 +54,9 @@ const char PROGMEM NMEA_CMD[] = "nmea";
|
||||
|
||||
// WiFi sniff/scan
|
||||
const char PROGMEM EVIL_PORTAL_CMD[] = "evilportal";
|
||||
const char PROGMEM PACKET_COUNT_CMD[] = "packetcount";
|
||||
const char PROGMEM SIGSTREN_CMD[] = "sigmon";
|
||||
const char PROGMEM SCAN_ALL_CMD[] = "scanall";
|
||||
const char PROGMEM SCANAP_CMD[] = "scanap";
|
||||
const char PROGMEM SCANSTA_CMD[] = "scansta";
|
||||
const char PROGMEM SNIFF_RAW_CMD[] = "sniffraw";
|
||||
@@ -76,6 +78,7 @@ const char PROGMEM ATTACK_TYPE_RR[] = "rickroll";
|
||||
|
||||
// WiFi Aux
|
||||
const char PROGMEM LIST_AP_CMD[] = "list";
|
||||
const char PROGMEM INFO_CMD[] = "info";
|
||||
const char PROGMEM SEL_CMD[] = "select";
|
||||
const char PROGMEM SSID_CMD[] = "ssid";
|
||||
const char PROGMEM SAVE_CMD[] = "save";
|
||||
@@ -109,7 +112,9 @@ const char PROGMEM HELP_NMEA_CMD[] = "nmea";
|
||||
|
||||
// WiFi sniff/scan
|
||||
const char PROGMEM HELP_EVIL_PORTAL_CMD[] = "evilportal [-c start [-w html.html]/sethtml <html.html>]";
|
||||
const char PROGMEM HELP_PACKET_COUNT_CMD[] = "packetcount";
|
||||
const char PROGMEM HELP_SIGSTREN_CMD[] = "sigmon";
|
||||
const char PROGMEM HELP_SCAN_ALL_CMD[] = "scanall";
|
||||
const char PROGMEM HELP_SCANAP_CMD[] = "scanap";
|
||||
const char PROGMEM HELP_SCANSTA_CMD[] = "scansta";
|
||||
const char PROGMEM HELP_SNIFF_RAW_CMD[] = "sniffraw";
|
||||
@@ -130,6 +135,7 @@ const char PROGMEM HELP_LIST_AP_CMD_A[] = "list -s";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_B[] = "list -a";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_C[] = "list -c";
|
||||
const char PROGMEM HELP_LIST_AP_CMD_D[] = "list -t";
|
||||
const char PROGMEM HELP_INFO_CMD[] = "info [-a <index>]";
|
||||
const char PROGMEM HELP_SEL_CMD_A[] = "select -a/-s/-c <index (comma separated)>/-f \"equals <String> or contains <String>\"";
|
||||
const char PROGMEM HELP_SSID_CMD_A[] = "ssid -a [-g <count>/-n <name>]";
|
||||
const char PROGMEM HELP_SSID_CMD_B[] = "ssid -r <index>";
|
||||
|
||||
@@ -189,31 +189,56 @@ void Display::tftDrawYScaleButtons(byte y_scale)
|
||||
key[3].drawButton();
|
||||
}
|
||||
|
||||
void Display::tftDrawChannelScaleButtons(int set_channel)
|
||||
void Display::tftDrawChannelScaleButtons(int set_channel, bool lnd_an)
|
||||
{
|
||||
tft.drawFastVLine(178, 0, 20, TFT_WHITE);
|
||||
tft.setCursor(145, 21); tft.setTextColor(TFT_WHITE); tft.setTextSize(1); tft.print(text10); tft.print(set_channel);
|
||||
if (lnd_an) {
|
||||
tft.drawFastVLine(178, 0, 20, TFT_WHITE);
|
||||
tft.setCursor(145, 21); tft.setTextColor(TFT_WHITE); tft.setTextSize(1); tft.print(text10); tft.print(set_channel);
|
||||
|
||||
key[4].initButton(&tft, // channel - box
|
||||
164,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
20,
|
||||
20,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"-",
|
||||
2);
|
||||
key[5].initButton(&tft, // channel + box
|
||||
193,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
20,
|
||||
20,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"+",
|
||||
2);
|
||||
key[4].initButton(&tft, // channel - box
|
||||
164,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"-",
|
||||
2);
|
||||
key[5].initButton(&tft, // channel + box
|
||||
193,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"+",
|
||||
2);
|
||||
}
|
||||
|
||||
else {
|
||||
key[4].initButton(&tft, // channel - box
|
||||
(EXT_BUTTON_WIDTH / 2) * 6,
|
||||
(STATUS_BAR_WIDTH * 2) + CHAR_WIDTH - 1, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"-",
|
||||
2);
|
||||
key[5].initButton(&tft, // channel + box
|
||||
(EXT_BUTTON_WIDTH / 2) * 10,
|
||||
(STATUS_BAR_WIDTH * 2) + CHAR_WIDTH - 1, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_BLACK, // Outline
|
||||
TFT_BLUE, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"+",
|
||||
2);
|
||||
}
|
||||
|
||||
key[4].setLabelDatum(1, 5, MC_DATUM);
|
||||
key[5].setLabelDatum(1, 5, MC_DATUM);
|
||||
@@ -222,21 +247,37 @@ void Display::tftDrawChannelScaleButtons(int set_channel)
|
||||
key[5].drawButton();
|
||||
}
|
||||
|
||||
void Display::tftDrawExitScaleButtons()
|
||||
void Display::tftDrawExitScaleButtons(bool lnd_an)
|
||||
{
|
||||
//tft.drawFastVLine(178, 0, 20, TFT_WHITE);
|
||||
//tft.setCursor(145, 21); tft.setTextColor(TFT_WHITE); tft.setTextSize(1); tft.print("Channel:"); tft.print(set_channel);
|
||||
|
||||
key[6].initButton(&tft, // Exit box
|
||||
137,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
20,
|
||||
20,
|
||||
TFT_ORANGE, // Outline
|
||||
TFT_RED, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"X",
|
||||
2);
|
||||
if (lnd_an) {
|
||||
|
||||
key[6].initButton(&tft, // Exit box
|
||||
137,
|
||||
10, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_ORANGE, // Outline
|
||||
TFT_RED, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"X",
|
||||
2);
|
||||
}
|
||||
|
||||
else {
|
||||
key[6].initButton(&tft, // Exit box
|
||||
EXT_BUTTON_WIDTH / 2,
|
||||
(STATUS_BAR_WIDTH * 2) + CHAR_WIDTH - 1, // x, y, w, h, outline, fill, text
|
||||
EXT_BUTTON_WIDTH,
|
||||
EXT_BUTTON_WIDTH,
|
||||
TFT_ORANGE, // Outline
|
||||
TFT_RED, // Fill
|
||||
TFT_BLACK, // Text
|
||||
"X",
|
||||
2);
|
||||
}
|
||||
|
||||
key[6].setLabelDatum(1, 5, MC_DATUM);
|
||||
|
||||
@@ -270,8 +311,13 @@ void Display::touchToExit()
|
||||
void Display::clearScreen()
|
||||
{
|
||||
//Serial.println(F("clearScreen()"));
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#ifndef MARAUDER_V7
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#else
|
||||
tft.fillRect(0, 0, TFT_WIDTH, TFT_HEIGHT, TFT_BLACK);
|
||||
tft.setCursor(0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef SCREEN_BUFFER
|
||||
@@ -340,7 +386,7 @@ void Display::displayBuffer(bool do_clear)
|
||||
blank[(18+(yStart - TOP_FIXED_AREA_2) / TEXT_HEIGHT)%19] = xPos;
|
||||
#else
|
||||
xPos = 0;
|
||||
if (this->screen_buffer->size() >= MAX_SCREEN_BUFFER)
|
||||
if (this->screen_buffer->size() >= MAX_SCREEN_BUFFER)
|
||||
this->scrollScreenBuffer();
|
||||
|
||||
screen_buffer->add(display_buffer->shift());
|
||||
@@ -348,14 +394,10 @@ void Display::displayBuffer(bool do_clear)
|
||||
for (int i = 0; i < this->screen_buffer->size(); i++) {
|
||||
tft.setCursor(xPos, (i * 12) + (SCREEN_HEIGHT / 6));
|
||||
String spaces = String(' ', TFT_WIDTH / CHAR_WIDTH);
|
||||
//for (int x = 0; x < TFT_WIDTH / CHAR_WIDTH; x++)
|
||||
// tft.print(" ");
|
||||
tft.print(spaces);
|
||||
tft.setCursor(xPos, (i * 12) + (SCREEN_HEIGHT / 6));
|
||||
|
||||
this->processAndPrintString(tft, this->screen_buffer->get(i));
|
||||
//tft.setTextColor(TFT_GREEN, TFT_BLACK);
|
||||
//tft.print(this->screen_buffer->get(i));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -112,8 +112,8 @@ class Display
|
||||
void tftDrawColorKey();
|
||||
void tftDrawXScaleButtons(byte x_scale);
|
||||
void tftDrawYScaleButtons(byte y_scale);
|
||||
void tftDrawChannelScaleButtons(int set_channel);
|
||||
void tftDrawExitScaleButtons();
|
||||
void tftDrawChannelScaleButtons(int set_channel, bool lnd_an = true);
|
||||
void tftDrawExitScaleButtons(bool lnd_an = true);
|
||||
void buildBanner(String msg, int xpos);
|
||||
void clearScreen();
|
||||
void displayBuffer(bool do_clear = false);
|
||||
|
||||
@@ -14,8 +14,6 @@ void EvilPortal::setup() {
|
||||
|
||||
html_files = new LinkedList<String>();
|
||||
|
||||
html_files->add("Back");
|
||||
|
||||
#ifdef HAS_SD
|
||||
if (sd_obj.supported) {
|
||||
sd_obj.listDirToLinkedList(html_files, "/", "html");
|
||||
|
||||
@@ -33,7 +33,7 @@ extern Buffer buffer_obj;
|
||||
#define RESET_CMD "reset"
|
||||
#define START_CMD "start"
|
||||
#define ACK_CMD "ack"
|
||||
#define MAX_AP_NAME_SIZE 30
|
||||
#define MAX_AP_NAME_SIZE 32
|
||||
#define WIFI_SCAN_EVIL_PORTAL 30
|
||||
|
||||
char apName[MAX_AP_NAME_SIZE] = "PORTAL";
|
||||
@@ -52,8 +52,9 @@ struct AccessPoint {
|
||||
uint8_t bssid[6];
|
||||
bool selected;
|
||||
LinkedList<char>* beacon;
|
||||
char rssi;
|
||||
LinkedList<uint8_t>* stations;
|
||||
int8_t rssi;
|
||||
LinkedList<uint16_t>* stations;
|
||||
uint16_t packets;
|
||||
};
|
||||
|
||||
class CaptiveRequestHandler : public AsyncWebHandler {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -85,6 +85,7 @@ PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
|
||||
PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
|
||||
PROGMEM static void html_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void ap_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void ap_info_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void at_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void station_list_cb(lv_obj_t * btn, lv_event_t event);
|
||||
PROGMEM static void setting_dropdown_cb(lv_obj_t * btn, lv_event_t event);
|
||||
@@ -97,7 +98,7 @@ struct Menu;
|
||||
|
||||
// Individual Nodes of a menu
|
||||
|
||||
struct MenuNode {
|
||||
/*struct MenuNode {
|
||||
String name;
|
||||
bool command;
|
||||
uint16_t color;
|
||||
@@ -105,6 +106,16 @@ struct MenuNode {
|
||||
TFT_eSPI_Button* button;
|
||||
bool selected;
|
||||
std::function<void()> callable;
|
||||
};*/
|
||||
|
||||
struct MenuNode {
|
||||
String name;
|
||||
bool command;
|
||||
uint8_t color;
|
||||
uint8_t icon;
|
||||
TFT_eSPI_Button* button;
|
||||
bool selected;
|
||||
std::function<void()> callable;
|
||||
};
|
||||
|
||||
// Full Menus
|
||||
@@ -112,7 +123,7 @@ struct Menu {
|
||||
String name;
|
||||
LinkedList<MenuNode>* list;
|
||||
Menu * parentMenu;
|
||||
uint8_t selected = 0;
|
||||
uint16_t selected = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -122,10 +133,13 @@ class MenuFunctions
|
||||
|
||||
String u_result = "";
|
||||
|
||||
|
||||
float _graph_scale = 1.0;
|
||||
uint32_t initTime = 0;
|
||||
uint8_t menu_start_index = 0;
|
||||
int menu_start_index = 0;
|
||||
uint8_t mini_kb_index = 0;
|
||||
uint8_t old_gps_sat_count = 0;
|
||||
uint8_t max_graph_value = 0;
|
||||
|
||||
// Main menu stuff
|
||||
Menu mainMenu;
|
||||
@@ -142,7 +156,6 @@ class MenuFunctions
|
||||
Menu updateMenu;
|
||||
Menu settingsMenu;
|
||||
Menu specSettingMenu;
|
||||
Menu infoMenu;
|
||||
Menu languageMenu;
|
||||
Menu sdDeleteMenu;
|
||||
|
||||
@@ -165,6 +178,9 @@ class MenuFunctions
|
||||
Menu htmlMenu;
|
||||
Menu miniKbMenu;
|
||||
Menu saveFileMenu;
|
||||
Menu genAPMacMenu;
|
||||
Menu cloneAPMacMenu;
|
||||
Menu setMacMenu;
|
||||
|
||||
// Bluetooth menu stuff
|
||||
Menu bluetoothSnifferMenu;
|
||||
@@ -178,16 +194,23 @@ class MenuFunctions
|
||||
// Menu icons
|
||||
|
||||
|
||||
|
||||
void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
uint16_t getColor(uint16_t color);
|
||||
void drawAvgLine(int16_t value);
|
||||
void drawMaxLine(int16_t value, uint16_t color);
|
||||
float calculateGraphScale(int16_t value);
|
||||
float graphScaleCheck(const int16_t array[TFT_WIDTH]);
|
||||
void drawGraph(int16_t *values);
|
||||
void renderGraphUI(uint8_t scan_mode = 0);
|
||||
//void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
void addNodes(Menu* menu, String name, uint8_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
|
||||
void battery(bool initial = false);
|
||||
void battery2(bool initial = false);
|
||||
void showMenuList(Menu* menu, int layer);
|
||||
String callSetting(String key);
|
||||
void runBoolSetting(String ley);
|
||||
void displaySetting(String key, Menu* menu, int index);
|
||||
void buttonSelected(uint8_t b, int8_t x = -1);
|
||||
void buttonNotSelected(uint8_t b, int8_t x = -1);
|
||||
void buttonSelected(int b, int x = -1);
|
||||
void buttonNotSelected(int b, int x = -1);
|
||||
#if (!defined(HAS_ILI9341) && defined(HAS_BUTTONS))
|
||||
void miniKeyboard(Menu * targetMenu);
|
||||
#endif
|
||||
@@ -214,6 +237,9 @@ class MenuFunctions
|
||||
Menu gpsInfoMenu;
|
||||
#endif
|
||||
|
||||
Menu infoMenu;
|
||||
Menu apInfoMenu;
|
||||
|
||||
Ticker tick;
|
||||
|
||||
uint16_t x = -1, y = -1;
|
||||
@@ -223,6 +249,7 @@ class MenuFunctions
|
||||
|
||||
String loaded_file = "";
|
||||
|
||||
void setGraphScale(float scale);
|
||||
void initLVGL();
|
||||
void deinitLVGL();
|
||||
void selectEPHTMLGFX();
|
||||
@@ -233,7 +260,7 @@ class MenuFunctions
|
||||
void buildButtons(Menu* menu, int starting_index = 0, String button_name = "");
|
||||
void changeMenu(Menu* menu);
|
||||
void drawStatusBar();
|
||||
void displayCurrentMenu(uint8_t start_index = 0);
|
||||
void displayCurrentMenu(int start_index = 0);
|
||||
void main(uint32_t currentTime);
|
||||
void RunSetup();
|
||||
void orientDisplay();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -98,10 +98,16 @@
|
||||
#define BT_SCAN_AIRTAG 43
|
||||
#define BT_SPOOF_AIRTAG 44
|
||||
#define BT_SCAN_FLIPPER 45
|
||||
#define WIFI_SCAN_CHAN_ANALYZER 46
|
||||
#define BT_SCAN_ANALYZER 47
|
||||
#define WIFI_SCAN_PACKET_RATE 48
|
||||
#define WIFI_SCAN_AP_STA 49
|
||||
|
||||
#define GRAPH_REFRESH 100
|
||||
#define BASE_MULTIPLIER 4
|
||||
|
||||
#define MAX_CHANNEL 14
|
||||
#define ANALYZER_NAME_REFRESH 100 // Number of events to refresh the name
|
||||
|
||||
#define MAX_CHANNEL 14
|
||||
|
||||
extern EvilPortal evil_portal_obj;
|
||||
|
||||
@@ -176,6 +182,9 @@ class WiFiScan
|
||||
// Wardriver thanks to https://github.com/JosephHewitt
|
||||
struct mac_addr mac_history[mac_history_len];
|
||||
|
||||
uint8_t ap_mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
|
||||
uint8_t sta_mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
|
||||
|
||||
// Settings
|
||||
uint mac_history_cursor = 0;
|
||||
uint8_t channel_hop_delay = 1;
|
||||
@@ -305,6 +314,7 @@ class WiFiScan
|
||||
NimBLEAdvertisementData GetUniversalAdvertisementData(EBLEPayloadType type);
|
||||
#endif
|
||||
|
||||
void addAnalyzerValue(int16_t value, int rssi_avg, int16_t target_array[], int array_size);
|
||||
bool seen_mac(unsigned char* mac);
|
||||
bool mac_cmp(struct mac_addr addr1, struct mac_addr addr2);
|
||||
void save_mac(unsigned char* mac);
|
||||
@@ -320,6 +330,9 @@ class WiFiScan
|
||||
|
||||
void startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_string);
|
||||
|
||||
void signalAnalyzerLoop(uint32_t tick);
|
||||
void channelAnalyzerLoop(uint32_t tick);
|
||||
void packetRateLoop(uint32_t tick);
|
||||
void packetMonitorMain(uint32_t currentTime);
|
||||
void eapolMonitorMain(uint32_t currentTime);
|
||||
void updateMidway();
|
||||
@@ -364,10 +377,22 @@ class WiFiScan
|
||||
|
||||
//LinkedList<ssid>* ssids;
|
||||
|
||||
// Stuff for RAW stats
|
||||
uint32_t mgmt_frames = 0;
|
||||
uint32_t data_frames = 0;
|
||||
|
||||
String analyzer_name_string = "";
|
||||
|
||||
uint8_t analyzer_frames_recvd = 0;
|
||||
|
||||
bool analyzer_name_update = false;
|
||||
|
||||
uint8_t set_channel = 1;
|
||||
|
||||
uint8_t old_channel = 0;
|
||||
|
||||
int16_t _analyzer_value = 0;
|
||||
|
||||
bool orient_display = false;
|
||||
bool wifi_initialized = false;
|
||||
bool ble_initialized = false;
|
||||
@@ -379,13 +404,52 @@ class WiFiScan
|
||||
String dst_mac = "ff:ff:ff:ff:ff:ff";
|
||||
byte src_mac[6] = {};
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
int16_t _analyzer_values[TFT_WIDTH];
|
||||
int16_t _temp_analyzer_values[TFT_WIDTH];
|
||||
#endif
|
||||
|
||||
String current_mini_kb_ssid = "";
|
||||
|
||||
const String alfa = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789-=[];',./`\\_+{}:\"<>?~|!@#$%^&*()";
|
||||
|
||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||
|
||||
wifi_init_config_t cfg2 = { \
|
||||
.event_handler = &esp_event_send_internal, \
|
||||
.osi_funcs = &g_wifi_osi_funcs, \
|
||||
.wpa_crypto_funcs = g_wifi_default_wpa_crypto_funcs, \
|
||||
.static_rx_buf_num = 6,\
|
||||
.dynamic_rx_buf_num = 6,\
|
||||
.tx_buf_type = 0,\
|
||||
.static_tx_buf_num = 1,\
|
||||
.dynamic_tx_buf_num = WIFI_DYNAMIC_TX_BUFFER_NUM,\
|
||||
.cache_tx_buf_num = 0,\
|
||||
.csi_enable = false,\
|
||||
.ampdu_rx_enable = false,\
|
||||
.ampdu_tx_enable = false,\
|
||||
.amsdu_tx_enable = false,\
|
||||
.nvs_enable = false,\
|
||||
.nano_enable = WIFI_NANO_FORMAT_ENABLED,\
|
||||
.rx_ba_win = 6,\
|
||||
.wifi_task_core_id = WIFI_TASK_CORE_ID,\
|
||||
.beacon_max_len = 752, \
|
||||
.mgmt_sbuf_num = 8, \
|
||||
.feature_caps = g_wifi_feature_caps, \
|
||||
.sta_disconnected_pm = WIFI_STA_DISCONNECTED_PM_ENABLED, \
|
||||
.espnow_max_encrypt_num = 0, \
|
||||
.magic = WIFI_INIT_CONFIG_MAGIC\
|
||||
};
|
||||
|
||||
wifi_config_t ap_config;
|
||||
|
||||
#ifdef HAS_SCREEN
|
||||
int8_t checkAnalyzerButtons(uint32_t currentTime);
|
||||
#endif
|
||||
void setMac();
|
||||
void renderRawStats();
|
||||
void renderPacketRate();
|
||||
void displayAnalyzerString(String str);
|
||||
String security_int_to_string(int security_type);
|
||||
char* stringToChar(String string);
|
||||
void RunSetup();
|
||||
@@ -405,8 +469,11 @@ class WiFiScan
|
||||
String freeRAM();
|
||||
void changeChannel();
|
||||
void changeChannel(int chan);
|
||||
void RunAPInfo(uint16_t index, bool do_display = true);
|
||||
void RunInfo();
|
||||
//void RunShutdownBLE();
|
||||
void RunSetMac(uint8_t * mac, bool ap = true);
|
||||
void RunGenerateRandomMac(bool ap = true);
|
||||
void RunGenerateSSIDs(int count = 20);
|
||||
void RunClearSSIDs();
|
||||
void RunClearAPs();
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
//#define MARAUDER_REV_FEATHER
|
||||
//// END BOARD TARGETS
|
||||
|
||||
#define MARAUDER_VERSION "v1.2.1"
|
||||
#define MARAUDER_VERSION "v1.4.2"
|
||||
|
||||
#define GRAPH_REFRESH 100
|
||||
|
||||
//// HARDWARE NAMES
|
||||
#ifdef MARAUDER_M5STICKC
|
||||
@@ -409,6 +411,10 @@
|
||||
#define TFT_HEIGHT 240
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
#define CHAR_WIDTH 6
|
||||
#define SCREEN_WIDTH TFT_HEIGHT // Originally 240
|
||||
#define SCREEN_HEIGHT TFT_WIDTH // Originally 320
|
||||
@@ -426,7 +432,7 @@
|
||||
//#define MENU_FONT &FreeSans9pt7b
|
||||
//#define MENU_FONT &FreeSansBold9pt7b
|
||||
#define BUTTON_SCREEN_LIMIT 6
|
||||
#define BUTTON_ARRAY_LEN 100
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#define STATUS_BAR_WIDTH (TFT_HEIGHT/16)
|
||||
#define LVGL_TICK_PERIOD 6
|
||||
|
||||
@@ -451,7 +457,7 @@
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(MARAUDER_M5STICKCP2)
|
||||
#if defined(MARAUDER_M5STICKCP2)
|
||||
#define MARAUDER_M5STICKC // From now on, everything is the same, except for one check in esp32_marauder.ino amd stickc_led.cpp/h
|
||||
|
||||
#define SCREEN_CHAR_WIDTH 40
|
||||
@@ -477,6 +483,10 @@
|
||||
#define TFT_HEIGHT 240
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
#define CHAR_WIDTH 6
|
||||
#define SCREEN_WIDTH TFT_HEIGHT // Originally 240
|
||||
#define SCREEN_HEIGHT TFT_WIDTH // Originally 320
|
||||
@@ -494,7 +504,7 @@
|
||||
//#define MENU_FONT &FreeSans9pt7b
|
||||
//#define MENU_FONT &FreeSansBold9pt7b
|
||||
#define BUTTON_SCREEN_LIMIT 6
|
||||
#define BUTTON_ARRAY_LEN 13
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#define STATUS_BAR_WIDTH (TFT_HEIGHT/16)
|
||||
#define LVGL_TICK_PERIOD 6
|
||||
|
||||
@@ -534,7 +544,12 @@
|
||||
#endif
|
||||
|
||||
#define TFT_SHIELD
|
||||
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
#define CHAR_WIDTH 12
|
||||
#define SCREEN_WIDTH TFT_WIDTH
|
||||
#define SCREEN_HEIGHT TFT_HEIGHT
|
||||
#define HEIGHT_1 TFT_WIDTH
|
||||
@@ -551,7 +566,7 @@
|
||||
//#define MENU_FONT &FreeSans9pt7b
|
||||
//#define MENU_FONT &FreeSansBold9pt7b
|
||||
#define BUTTON_SCREEN_LIMIT 12
|
||||
#define BUTTON_ARRAY_LEN 12
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#define STATUS_BAR_WIDTH 16
|
||||
#define LVGL_TICK_PERIOD 6
|
||||
|
||||
@@ -592,7 +607,16 @@
|
||||
#endif
|
||||
|
||||
#define TFT_DIY
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
#define SCREEN_BUFFER
|
||||
|
||||
#define MAX_SCREEN_BUFFER 22
|
||||
|
||||
#define CHAR_WIDTH 12
|
||||
#define SCREEN_WIDTH TFT_WIDTH
|
||||
#define SCREEN_HEIGHT TFT_HEIGHT
|
||||
#define HEIGHT_1 TFT_WIDTH
|
||||
@@ -609,7 +633,7 @@
|
||||
//#define MENU_FONT &FreeSans9pt7b
|
||||
//#define MENU_FONT &FreeSansBold9pt7b
|
||||
#define BUTTON_SCREEN_LIMIT 12
|
||||
#define BUTTON_ARRAY_LEN 12
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#define STATUS_BAR_WIDTH 16
|
||||
#define LVGL_TICK_PERIOD 6
|
||||
|
||||
@@ -649,11 +673,15 @@
|
||||
#define TFT_HEIGHT 320
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
|
||||
#define TFT_DIY
|
||||
|
||||
#define SCREEN_BUFFER
|
||||
|
||||
#define MAX_SCREEN_BUFFER 22
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
#define CHAR_WIDTH 12
|
||||
#define SCREEN_WIDTH TFT_WIDTH
|
||||
@@ -672,7 +700,7 @@
|
||||
//#define MENU_FONT &FreeSans9pt7b
|
||||
//#define MENU_FONT &FreeSansBold9pt7b
|
||||
#define BUTTON_SCREEN_LIMIT 12
|
||||
#define BUTTON_ARRAY_LEN 100
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#define STATUS_BAR_WIDTH 16
|
||||
#define LVGL_TICK_PERIOD 6
|
||||
|
||||
@@ -712,9 +740,14 @@
|
||||
#define TFT_HEIGHT 320
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
|
||||
#define TFT_DIY
|
||||
#define KIT
|
||||
|
||||
#define EXT_BUTTON_WIDTH 20
|
||||
|
||||
#define CHAR_WIDTH 12
|
||||
#define SCREEN_WIDTH TFT_WIDTH
|
||||
#define SCREEN_HEIGHT TFT_HEIGHT
|
||||
#define HEIGHT_1 TFT_WIDTH
|
||||
@@ -731,7 +764,7 @@
|
||||
//#define MENU_FONT &FreeSans9pt7b
|
||||
//#define MENU_FONT &FreeSansBold9pt7b
|
||||
#define BUTTON_SCREEN_LIMIT 12
|
||||
#define BUTTON_ARRAY_LEN 12
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#define STATUS_BAR_WIDTH 16
|
||||
#define LVGL_TICK_PERIOD 6
|
||||
|
||||
@@ -783,6 +816,10 @@
|
||||
#define TFT_HEIGHT 128
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
#define CHAR_WIDTH 6
|
||||
#define SCREEN_WIDTH TFT_WIDTH // Originally 240
|
||||
#define SCREEN_HEIGHT TFT_HEIGHT // Originally 320
|
||||
@@ -800,7 +837,7 @@
|
||||
//#define MENU_FONT &FreeSans9pt7b
|
||||
//#define MENU_FONT &FreeSansBold9pt7b
|
||||
#define BUTTON_SCREEN_LIMIT 10
|
||||
#define BUTTON_ARRAY_LEN 100
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#define STATUS_BAR_WIDTH (TFT_HEIGHT/16)
|
||||
#define LVGL_TICK_PERIOD 6
|
||||
|
||||
@@ -850,6 +887,10 @@
|
||||
#define TFT_HEIGHT 135
|
||||
#endif
|
||||
|
||||
#define GRAPH_VERT_LIM TFT_HEIGHT/2
|
||||
|
||||
#define EXT_BUTTON_WIDTH 0
|
||||
|
||||
#define CHAR_WIDTH 6
|
||||
#define SCREEN_WIDTH TFT_WIDTH // Originally 240
|
||||
#define SCREEN_HEIGHT TFT_HEIGHT // Originally 320
|
||||
@@ -867,7 +908,7 @@
|
||||
//#define MENU_FONT &FreeSans9pt7b
|
||||
//#define MENU_FONT &FreeSansBold9pt7b
|
||||
#define BUTTON_SCREEN_LIMIT 5
|
||||
#define BUTTON_ARRAY_LEN 100
|
||||
#define BUTTON_ARRAY_LEN BUTTON_SCREEN_LIMIT
|
||||
#define STATUS_BAR_WIDTH (TFT_HEIGHT/16)
|
||||
#define LVGL_TICK_PERIOD 6
|
||||
|
||||
@@ -1080,6 +1121,27 @@
|
||||
#endif
|
||||
//// END SD DEFINITIONS
|
||||
|
||||
//// SPACE SAVING COLORS
|
||||
#define TFTWHITE 1
|
||||
#define TFTCYAN 2
|
||||
#define TFTBLUE 3
|
||||
#define TFTRED 4
|
||||
#define TFTGREEN 5
|
||||
#define TFTGREY 6
|
||||
#define TFTGRAY 7
|
||||
#define TFTMAGENTA 8
|
||||
#define TFTVIOLET 9
|
||||
#define TFTORANGE 10
|
||||
#define TFTYELLOW 11
|
||||
#define TFTLIGHTGREY 12
|
||||
#define TFTPURPLE 13
|
||||
#define TFTNAVY 14
|
||||
#define TFTSILVER 15
|
||||
#define TFTDARKGREY 16
|
||||
#define TFTSKYBLUE 17
|
||||
#define TFTLIME 18
|
||||
//// END SPACE SAVING COLORS
|
||||
|
||||
//// SCREEN STUFF
|
||||
#ifndef HAS_SCREEN
|
||||
|
||||
@@ -1109,29 +1171,29 @@
|
||||
//// MEMORY LOWER LIMIT STUFF
|
||||
// These values are in bytes
|
||||
#ifdef MARAUDER_M5STICKC
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_MINI)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_V7)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_REV_FEATHER)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_V4)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_V6) || defined(MARAUDER_V6_1)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_KIT)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(GENERIC_ESP32)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_FLIPPER)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(ESP32_LDDB)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(MARAUDER_DEV_BOARD_PRO)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
#define MEM_LOWER_LIM 20000
|
||||
#define MEM_LOWER_LIM 10000
|
||||
#endif
|
||||
//// END MEMORY LOWER LIMIT STUFF
|
||||
|
||||
@@ -1187,50 +1249,50 @@
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 4
|
||||
#define GPS_RX 13
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#elif defined(MARAUDER_V4)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 4
|
||||
#define GPS_RX 13
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#elif defined(MARAUDER_KIT)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 4
|
||||
#define GPS_RX 13
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#elif defined(MARAUDER_DEV_BOARD_PRO)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 21
|
||||
#define GPS_RX 17
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#elif defined(MARAUDER_MINI)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 21
|
||||
#define GPS_RX 22
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#elif defined(MARAUDER_V7)
|
||||
#define GPS_SERIAL_INDEX 2
|
||||
#define GPS_TX 21
|
||||
#define GPS_RX 22
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#elif defined(MARAUDER_FLIPPER)
|
||||
#define GPS_SERIAL_INDEX 1
|
||||
#define GPS_TX 9
|
||||
#define GPS_RX 21
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#elif defined(MARAUDER_M5STICKC)
|
||||
#define GPS_SERIAL_INDEX 1
|
||||
#define GPS_TX 33
|
||||
#define GPS_RX 32
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#elif defined(MARAUDER_REV_FEATHER)
|
||||
#define GPS_SERIAL_INDEX 1
|
||||
#define GPS_TX 6
|
||||
#define GPS_RX 9
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#endif
|
||||
#else
|
||||
#define mac_history_len 512
|
||||
#define mac_history_len 100
|
||||
#endif
|
||||
//// END GPS STUFF
|
||||
|
||||
@@ -1292,4 +1354,20 @@
|
||||
#endif
|
||||
//// END MARAUDER TITLE STUFF
|
||||
|
||||
//// PCAP BUFFER STUFF
|
||||
|
||||
#ifdef MARAUDER_V7
|
||||
#define BUF_SIZE 8 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
|
||||
#define SNAP_LEN 4096 // max len of each recieved packet
|
||||
#elif defined(MARAUDER_MINI)
|
||||
#define BUF_SIZE 8 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
|
||||
#define SNAP_LEN 4096 // max len of each recieved packet
|
||||
#elif defined(MARAUDER_REV_FEATHER)
|
||||
#define BUF_SIZE 8 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
|
||||
#define SNAP_LEN 4096 // max len of each recieved packet
|
||||
#else
|
||||
#define BUF_SIZE 3 * 1024 // Had to reduce buffer size to save RAM. GG @spacehuhn
|
||||
#define SNAP_LEN 2324 // max len of each recieved packet
|
||||
#endif
|
||||
//// PCAP BUFFER STUFF
|
||||
#endif
|
||||
|
||||
@@ -148,9 +148,10 @@ void backlightOff() {
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
esp_spiram_init();
|
||||
|
||||
#ifdef defined(MARAUDER_M5STICKC) && !defined(MARAUDER_M5STICKCP2)
|
||||
axp192_obj.begin();
|
||||
#endif
|
||||
@@ -346,7 +347,9 @@ void loop()
|
||||
bool mini = false;
|
||||
|
||||
#ifdef SCREEN_BUFFER
|
||||
mini = true;
|
||||
#ifndef HAS_ILI9341
|
||||
mini = true;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAS_ILI9341
|
||||
@@ -366,20 +369,11 @@ void loop()
|
||||
#endif
|
||||
|
||||
// Update all of our objects
|
||||
/*#ifdef HAS_SCREEN
|
||||
bool do_draw = display_obj.draw_tft;
|
||||
#else
|
||||
bool do_draw = false;
|
||||
#endif*/
|
||||
|
||||
//if ((!do_draw) && (wifi_scan_obj.currentScanMode != ESP_UPDATE))
|
||||
//{
|
||||
cli_obj.main(currentTime);
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.main(wifi_scan_obj.currentScanMode);
|
||||
#endif
|
||||
wifi_scan_obj.main(currentTime);
|
||||
//evil_portal_obj.main(wifi_scan_obj.currentScanMode);
|
||||
|
||||
#ifdef HAS_GPS
|
||||
gps_obj.main();
|
||||
@@ -395,7 +389,6 @@ void loop()
|
||||
|
||||
#ifdef HAS_BATTERY
|
||||
battery_obj.main(currentTime);
|
||||
//temp_obj.main(currentTime);
|
||||
#endif
|
||||
settings_obj.main(currentTime);
|
||||
if (((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) && (wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL)) ||
|
||||
@@ -403,7 +396,6 @@ void loop()
|
||||
#ifdef HAS_SCREEN
|
||||
menu_function_obj.main(currentTime);
|
||||
#endif
|
||||
//cli_obj.main(currentTime);
|
||||
}
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
flipper_led.main();
|
||||
@@ -415,29 +407,9 @@ void loop()
|
||||
led_obj.main(currentTime);
|
||||
#endif
|
||||
|
||||
//if (wifi_scan_obj.currentScanMode == OTA_UPDATE)
|
||||
// web_obj.main();
|
||||
#ifdef HAS_SCREEN
|
||||
delay(1);
|
||||
#else
|
||||
delay(50);
|
||||
#endif
|
||||
//}
|
||||
/*else if (wifi_scan_obj.currentScanMode == ESP_UPDATE) {
|
||||
#ifdef HAS_SCREEN
|
||||
display_obj.main(wifi_scan_obj.currentScanMode);
|
||||
menu_function_obj.main(currentTime);
|
||||
#endif
|
||||
|
||||
#ifdef MARAUDER_FLIPPER
|
||||
flipper_led.main();
|
||||
#elif defined(XIAO_ESP32_S3)
|
||||
xiao_led.main();
|
||||
#else
|
||||
led_obj.main(currentTime);
|
||||
#endif
|
||||
|
||||
//cli_obj.main(currentTime);
|
||||
delay(1);
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -12,6 +12,136 @@ struct mac_addr {
|
||||
struct Station {
|
||||
uint8_t mac[6];
|
||||
bool selected;
|
||||
uint16_t packets;
|
||||
};
|
||||
|
||||
const char apple_ouis[][9] PROGMEM = {
|
||||
"00:17:F2", "00:1E:C2", "00:26:08", "F8:1E:DF", "BC:92:6B",
|
||||
"28:E0:2C", "3C:07:54", "7C:D1:C3", "DC:A9:04", "F0:D1:A9",
|
||||
"C0:2C:5C", "00:03:93", "00:03:94", "00:03:95", "00:03:96",
|
||||
"00:03:97", "00:03:98", "00:03:99", "00:03:9A", "00:03:9B",
|
||||
"00:03:9C", "00:03:9D", "00:03:9E", "00:03:9F", "00:03:A0",
|
||||
"00:03:A1", "00:03:A2", "00:03:A3", "00:03:A4", "00:03:A5",
|
||||
"00:03:A6", "00:03:A7", "00:03:A8", "00:03:A9", "00:03:AA",
|
||||
"00:03:AB", "00:03:AC", "00:03:AD", "00:03:AE", "00:03:AF",
|
||||
"00:03:B0", "00:03:B1", "00:03:B2", "00:03:B3", "00:03:B4",
|
||||
"00:03:B5", "00:03:B6", "00:03:B7", "00:03:B8", "00:03:B9",
|
||||
"00:03:BA", "00:03:BB", "00:03:BC", "00:03:BD", "00:03:BE",
|
||||
"00:03:BF", "00:03:C0", "00:03:C1", "00:03:C2", "00:03:C3",
|
||||
"00:03:C4", "00:03:C5", "00:03:C6", "00:03:C7", "00:03:C8",
|
||||
"00:03:C9", "00:03:CA", "00:03:CB", "00:03:CC", "00:03:CD",
|
||||
"00:03:CE", "00:03:CF", "00:03:D0", "00:03:D1", "00:03:D2",
|
||||
"00:03:D3", "00:03:D4", "00:03:D5", "00:03:D6", "00:03:D7",
|
||||
"00:03:D8", "00:03:D9", "00:03:DA", "00:03:DB", "00:03:DC",
|
||||
"00:03:DD", "00:03:DE", "00:03:DF", "00:03:E0", "00:03:E1",
|
||||
"00:03:E2", "00:03:E3", "00:03:E4", "00:03:E5", "00:03:E6",
|
||||
"00:03:E7", "00:03:E8", "00:03:E9", "00:03:EA", "00:03:EB",
|
||||
"00:03:EC", "00:03:ED", "00:03:EE", "00:03:EF", "00:03:F0",
|
||||
"00:03:F1", "00:03:F2", "00:03:F3", "00:03:F4", "00:03:F5",
|
||||
"00:03:F6", "00:03:F7", "00:03:F8", "00:03:F9", "00:03:FA",
|
||||
"00:03:FB", "00:03:FC", "00:03:FD", "00:03:FE", "00:03:FF"
|
||||
};
|
||||
|
||||
const char asus_ouis[][9] PROGMEM = {
|
||||
"00:0C:6E", "00:0E:A6", "00:11:2F", "00:11:D8", "00:13:D4", "00:15:F2", "00:17:31", "00:18:F3", "00:1A:92",
|
||||
"00:1B:FC", "00:1D:60", "00:1E:8C", "00:1F:C6", "00:22:15", "00:23:54", "00:24:8C", "00:26:18", "00:E0:18",
|
||||
"04:42:1A", "04:92:26", "04:D4:C4", "04:D9:F5", "08:60:6E", "08:62:66", "08:BF:B8", "0C:9D:92", "10:7B:44",
|
||||
"10:7C:61", "10:BF:48", "10:C3:7B", "14:DA:E9", "14:DD:A9", "18:31:BF", "1C:87:2C", "1C:B7:2C", "20:CF:30",
|
||||
"24:4B:FE", "2C:4D:54", "2C:56:DC", "2C:FD:A1", "30:5A:3A", "30:85:A9", "34:97:F6", "38:2C:4A", "38:D5:47",
|
||||
"3C:7C:3F", "40:16:7E", "40:B0:76", "48:5B:39", "4C:ED:FB", "50:46:5D", "50:EB:F6", "54:04:A6", "54:A0:50",
|
||||
"58:11:22", "60:45:CB", "60:A4:4C", "60:CF:84", "70:4D:7B", "70:8B:CD", "74:D0:2B", "78:24:AF", "7C:10:C9",
|
||||
"88:D7:F6", "90:E6:BA", "9C:5C:8E", "A0:36:BC", "A8:5E:45", "AC:22:0B", "AC:9E:17", "B0:6E:BF", "BC:AE:C5",
|
||||
"BC:EE:7B", "C8:60:00", "C8:7F:54", "CC:28:AA", "D0:17:C2", "D4:5D:64", "D8:50:E6", "E0:3F:49", "E0:CB:4E",
|
||||
"E8:9C:25", "F0:2F:74", "F0:79:59", "F4:6D:04", "F8:32:E4", "FC:34:97", "FC:C2:33"
|
||||
};
|
||||
|
||||
const char belkin_ouis[][9] PROGMEM = {
|
||||
"00:11:50", "00:17:3F", "00:30:BD", "08:BD:43", "14:91:82", "24:F5:A2", "30:23:03", "80:69:1A", "94:10:3E",
|
||||
"94:44:52", "B4:75:0E", "C0:56:27", "C4:41:1E", "D8:EC:5E", "E8:9F:80", "EC:1A:59", "EC:22:80"
|
||||
};
|
||||
|
||||
const char cisco_ouis[][9] PROGMEM = {
|
||||
"00:1B:0D", "00:1D:45", "00:1E:7A", "00:25:9C", "00:50:56",
|
||||
"40:55:39", "58:8D:09", "A4:4C:C8", "F8:0F:F9"
|
||||
};
|
||||
|
||||
const char dlink_ouis[][9] PROGMEM = {
|
||||
"00:05:5D", "00:0D:88", "00:0F:3D", "00:11:95", "00:13:46", "00:15:E9", "00:17:9A", "00:19:5B", "00:1B:11",
|
||||
"00:1C:F0", "00:1E:58", "00:21:91", "00:22:B0", "00:24:01", "00:26:5A", "00:AD:24", "04:BA:D6", "08:5A:11",
|
||||
"0C:0E:76", "0C:B6:D2", "10:62:EB", "10:BE:F5", "14:D6:4D", "18:0F:76", "1C:5F:2B", "1C:7E:E5", "1C:AF:F7",
|
||||
"1C:BD:B9", "28:3B:82", "30:23:03", "34:08:04", "34:0A:33", "3C:1E:04", "3C:33:32", "40:86:CB", "40:9B:CD",
|
||||
"54:B8:0A", "5C:D9:98", "60:63:4C", "64:29:43", "6C:19:8F", "6C:72:20", "74:44:01", "74:DA:DA", "78:32:1B",
|
||||
"78:54:2E", "78:98:E8", "80:26:89", "84:C9:B2", "88:76:B9", "90:8D:78", "90:94:E4", "9C:D6:43", "A0:63:91",
|
||||
"A0:AB:1B", "A4:2A:95", "A8:63:7D", "AC:F1:DF", "B4:37:D8", "B8:A3:86", "BC:0F:9A", "BC:22:28", "BC:F6:85",
|
||||
"C0:A0:BB", "C4:A8:1D", "C4:E9:0A", "C8:78:7D", "C8:BE:19", "C8:D3:A3", "CC:B2:55", "D8:FE:E3", "DC:EA:E7",
|
||||
"E0:1C:FC", "E4:6F:13", "E8:CC:18", "EC:22:80", "EC:AD:E0", "F0:7D:68", "F0:B4:D2", "F4:8C:EB", "F8:E9:03",
|
||||
"FC:75:16"
|
||||
};
|
||||
|
||||
const char google_ouis[][9] PROGMEM = {
|
||||
"3C:5A:B4", "5C:BF:C0", "78:4F:43", "A4:77:33", "D4:97:0B", "F0:72:8C"
|
||||
};
|
||||
|
||||
const char huawei_ouis[][9] PROGMEM = {
|
||||
"00:1A:2B", "28:FF:3C", "5C:4C:A9", "8C:71:F8", "C8:D1:5E",
|
||||
"E4:4C:A9", "F4:12:FA"
|
||||
};
|
||||
|
||||
const char lg_ouis[][9] PROGMEM = {
|
||||
"00:17:C0", "18:AF:8F", "38:2D:AE", "5C:87:9C", "68:27:37",
|
||||
"78:5D:C8", "94:65:2D", "A4:77:33", "C4:43:8F"
|
||||
};
|
||||
|
||||
const char linksys_ouis[][9] PROGMEM = {
|
||||
"00:04:5A", "00:06:25", "00:0C:41", "00:0E:08", "00:0F:66", "00:12:17", "00:13:10", "00:14:BF", "00:16:B6",
|
||||
"00:18:39", "00:18:F8", "00:1A:70", "00:1C:10", "00:1D:7E", "00:1E:E5", "00:21:29", "00:22:6B", "00:23:69",
|
||||
"00:25:9C", "00:23:54", "00:24:B2", "00:31:92", "00:5F:67", "10:27:F5", "14:EB:B6", "1C:61:B4", "20:36:26",
|
||||
"28:87:BA", "30:5A:3A", "2C:FD:A1", "30:23:03", "30:46:9A", "40:ED:00", "48:22:54", "50:91:E3", "54:AF:97",
|
||||
"5C:A2:F4", "5C:A6:E6", "5C:E9:31", "60:A4:B7", "68:7F:F0", "6C:5A:B0", "78:8C:B5", "7C:C2:C6", "9C:53:22",
|
||||
"9C:A2:F4", "A8:42:A1", "AC:15:A2", "B0:A7:B9", "B4:B0:24", "C0:06:C3", "CC:68:B6", "E8:48:B8", "F0:A7:31"
|
||||
};
|
||||
|
||||
const char netgear_ouis[][9] PROGMEM = {
|
||||
"00:09:5B", "00:0F:B5", "00:14:6C", "00:1B:2F", "00:1E:2A", "00:1F:33", "00:22:3F", "00:22:4B", "00:26:F2",
|
||||
"00:8E:F2", "08:02:8E", "08:36:C9", "08:BD:43", "10:0C:6B", "10:0D:7F", "10:DA:43", "14:59:C0", "20:4E:7F",
|
||||
"20:E5:2A", "28:80:88", "28:94:01", "28:C6:8E", "2C:30:33", "2C:B0:5D", "30:46:9A", "34:98:B5", "38:94:ED",
|
||||
"3C:37:86", "40:5D:82", "44:A5:6E", "4C:60:DE", "50:4A:6E", "50:6A:03", "54:07:7D", "58:EF:68", "60:38:E0",
|
||||
"6C:B0:CE", "6C:CD:D6", "74:44:01", "80:37:73", "84:1B:5E", "8C:3B:AD", "94:18:65", "9C:3D:CF", "9C:C9:EB",
|
||||
"9C:D3:6D", "A0:04:60", "A0:21:B7", "A0:40:A0", "A4:2B:8C", "B0:39:56", "B0:7F:B9", "B0:B9:8A", "BC:A5:11",
|
||||
"C0:3F:0E", "C0:FF:D4", "C4:04:15", "C4:3D:C7", "C8:9E:43", "CC:40:D0", "DC:EF:09", "E0:46:9A", "E0:46:EE",
|
||||
"E0:91:F5", "E4:F4:C6", "E8:FC:AF", "F8:73:94"
|
||||
};
|
||||
|
||||
const char oneplus_ouis[][9] PROGMEM = {
|
||||
"08:EC:A9", "30:9C:23", "38:78:62", "64:A2:F9", "74:AC:B9",
|
||||
"A8:14:51", "B4:86:55", "D8:CB:8A", "F4:8C:50"
|
||||
};
|
||||
|
||||
const char samsung_ouis[][9] PROGMEM = {
|
||||
"00:12:47", "00:15:99", "00:16:6B", "00:1B:FC", "10:5F:06",
|
||||
"18:59:36", "20:02:AF", "24:4B:03", "38:2D:3D", "40:B8:37",
|
||||
"00:1F:12", "00:1D:0F", "00:1A:9A", "00:19:E1", "00:18:FF",
|
||||
"00:17:77", "00:16:72", "00:14:69", "00:13:65", "00:12:60",
|
||||
"30:37:0D", "40:8C:47", "50:55:5F", "60:47:A1", "70:0A:AD",
|
||||
"80:61:43", "90:48:F7", "A0:4C:CB", "B0:5E:93", "C0:3D:F5",
|
||||
"D0:31:AA", "E0:4F:02", "F0:3B:94"
|
||||
};
|
||||
|
||||
const char sony_ouis[][9] PROGMEM = {
|
||||
"00:19:C5", "00:1B:59", "00:1E:DC", "10:68:3F", "54:42:49",
|
||||
"A8:E3:EE", "B8:F9:34", "CC:5D:4E", "E8:89:2F"
|
||||
};
|
||||
|
||||
const char tplink_ouis[][9] PROGMEM = {
|
||||
"00:31:92", "00:5F:67", "10:27:F5", "14:EB:B6", "1C:61:B4", "20:36:26", "28:87:BA", "30:DE:4B", "34:60:F9",
|
||||
"3C:52:A1", "40:ED:00", "48:22:54", "50:91:E3", "54:AF:97", "5C:62:8B", "5C:A6:E6", "5C:E9:31", "60:A4:B7",
|
||||
"68:7F:F0", "6C:5A:B0", "78:8C:B5", "7C:C2:C6", "9C:53:22", "9C:A2:F4", "A8:42:A1", "AC:15:A2", "B0:A7:B9",
|
||||
"B4:B0:24", "C0:06:C3", "CC:68:B6", "E8:48:B8", "F0:A7:31"
|
||||
};
|
||||
|
||||
const char xiaomi_ouis[][9] PROGMEM = {
|
||||
"04:CF:8C", "18:59:36", "38:1A:2D", "64:B4:73", "78:02:F8",
|
||||
"90:4E:91", "C4:0B:CB", "D0:DB:32"
|
||||
};
|
||||
|
||||
String byteArrayToHexString(const std::vector<uint8_t>& byteArray) {
|
||||
@@ -127,4 +257,63 @@ void convertMacStringToUint8(const String& macStr, uint8_t macAddr[6]) {
|
||||
}
|
||||
}
|
||||
|
||||
// Function to check if the given MAC address matches any known OUI
|
||||
const char* getManufacturer(const char *addr) {
|
||||
static char oui[9]; // Temporary buffer for extracted OUI
|
||||
|
||||
// Extract the first three bytes (OUI) from addr
|
||||
strncpy(oui, addr, 8);
|
||||
oui[8] = '\0'; // Ensure null termination
|
||||
|
||||
// Convert the addr (OUI) to lowercase
|
||||
for (int i = 0; i < 8; i++) {
|
||||
oui[i] = tolower(oui[i]);
|
||||
}
|
||||
|
||||
// Helper macro to check against an array stored in PROGMEM
|
||||
#define CHECK_OUI(manufacturer, list) \
|
||||
for (uint8_t i = 0; i < sizeof(list) / sizeof(list[0]); i++) { \
|
||||
char storedOUI[9]; \
|
||||
strcpy_P(storedOUI, list[i]); \
|
||||
/* Convert the stored OUI to lowercase */ \
|
||||
for (int j = 0; j < 8; j++) { \
|
||||
storedOUI[j] = tolower(storedOUI[j]); \
|
||||
} \
|
||||
if (strcmp(oui, storedOUI) == 0) return manufacturer; \
|
||||
}
|
||||
|
||||
// Check against known manufacturers
|
||||
CHECK_OUI("Apple", apple_ouis);
|
||||
CHECK_OUI("Asus", asus_ouis);
|
||||
CHECK_OUI("Belkin", belkin_ouis);
|
||||
CHECK_OUI("Cisco", cisco_ouis);
|
||||
CHECK_OUI("DLink", dlink_ouis);
|
||||
CHECK_OUI("Google", google_ouis);
|
||||
CHECK_OUI("Huawei", huawei_ouis);
|
||||
CHECK_OUI("LG", lg_ouis);
|
||||
CHECK_OUI("Linksys", linksys_ouis);
|
||||
CHECK_OUI("Netgear", netgear_ouis);
|
||||
CHECK_OUI("OnePlus", oneplus_ouis);
|
||||
CHECK_OUI("Samsung", samsung_ouis);
|
||||
CHECK_OUI("Sony", sony_ouis);
|
||||
CHECK_OUI("TP-Link", tplink_ouis);
|
||||
CHECK_OUI("Xiaomi", xiaomi_ouis);
|
||||
|
||||
return ""; // Return "Unknown" if no match is found
|
||||
}
|
||||
|
||||
String replaceOUIWithManufacturer(const char *sta_addr) {
|
||||
const char *manufacturer = getManufacturer(sta_addr);
|
||||
|
||||
if (manufacturer == nullptr || strlen(manufacturer) == 0) {
|
||||
return String(sta_addr); // Return original if no manufacturer found
|
||||
}
|
||||
|
||||
// Skip the first 8 characters (3 bytes and 2 colons)
|
||||
const char *mac_suffix = sta_addr + 8;
|
||||
|
||||
// Construct the new address: manufacturer + the remaining MAC address (after the first 3 bytes)
|
||||
return String(manufacturer) + mac_suffix;
|
||||
}
|
||||
|
||||
#endif
|
||||
Binary file not shown.
BIN
mechanical/V7/Inlay/Front_debos.stl
Normal file
BIN
mechanical/V7/Inlay/Front_debos.stl
Normal file
Binary file not shown.
BIN
mechanical/V7/Inlay/v7 Fill.stl
Normal file
BIN
mechanical/V7/Inlay/v7 Fill.stl
Normal file
Binary file not shown.
BIN
mechanical/V7/Inlay/v7 Outline.stl
Normal file
BIN
mechanical/V7/Inlay/v7 Outline.stl
Normal file
Binary file not shown.
BIN
mechanical/V7/JCMK Inlay.stl
Normal file
BIN
mechanical/V7/JCMK Inlay.stl
Normal file
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user