Merge pull request #1362 from justcallmekoko/develop

Add commands upload, foxhunt, list bluetooth
This commit is contained in:
Just Call Me Koko
2026-07-08 19:13:00 -04:00
committed by GitHub
4 changed files with 114 additions and 32 deletions
+80 -8
View File
@@ -275,6 +275,7 @@ void CommandLine::runCommand(String input) {
Serial.println(HELP_LIST_AP_CMD_D);
Serial.println(HELP_LIST_AP_CMD_E);
Serial.println(HELP_LIST_AP_CMD_F);
Serial.println(HELP_LIST_AP_CMD_G);
Serial.println(HELP_SEL_CMD_A);
Serial.println(HELP_SSID_CMD_A);
Serial.println(HELP_SSID_CMD_B);
@@ -287,6 +288,7 @@ void CommandLine::runCommand(String input) {
Serial.println(HELP_MAC_CMD_D);
Serial.println(HELP_ADD_CMD_A);
Serial.println(HELP_ADD_CMD_B);
Serial.println(HELP_UPLOAD_CMD);
// Bluetooth sniff/scan
#ifdef HAS_BT
@@ -496,6 +498,53 @@ void CommandLine::runCommand(String input) {
}
}
else if (cmd_args.get(0) == UPLOAD_CMD) {
#ifdef HAS_DIRECT_UPLOAD
int dest_sw = this->argSearch(&cmd_args, "-d");
String upload_dest_arg = cmd_args.get(dest_sw + 1);
int upload_dest = -1;
if (upload_dest_arg == "wdg")
upload_dest = WDG_UPLOAD;
else if (upload_dest_arg == "wigle")
upload_dest = WIGLE_UPLOAD;
else if (upload_dest_arg == "both")
upload_dest = BOTH_UPLOAD;
if (upload_dest > -1) {
String ssid = settings_obj.loadSetting<String>("ClientSSID");
String pw = settings_obj.loadSetting<String>("ClientPW");
Serial.println("Connecting to " + ssid);
if (!wifi_scan_obj.joinWiFi(ssid, pw, false)) {
Serial.println("Failed to connected to " + ssid);
return;
}
delay(1000);
for (int i = 0; i < sd_obj.sd_files->size(); i++) {
if (sd_obj.sd_files->get(i).startsWith("wardrive_") || sd_obj.sd_files->get(i).startsWith("wigle-")) {
if (!sd_obj.sd_files->get(i).endsWith(".wigle") && !sd_obj.sd_files->get(i).endsWith(".wdg") && !sd_obj.sd_files->get(i).endsWith(".gpx")) {
Serial.println("Uploading " + sd_obj.sd_files->get(i) + "...");
if (wifi_scan_obj.uploadFile("/" + sd_obj.sd_files->get(i), true, upload_dest)) {
Serial.println("Upload OK");
} else {
Serial.println("WiGLE failed");
}
}
}
}
WiFi.disconnect(true);
delay(100);
wifi_scan_obj.StartScan(WIFI_SCAN_OFF, TFT_RED);
Serial.println("Upload complete");
}
#else
Serial.println("Direct upload not supported");
#endif
}
else if (cmd_args.get(0) == SETTINGS_CMD) {
int ss_sw = this->argSearch(&cmd_args, "-s"); // Set setting
int re_sw = this->argSearch(&cmd_args, "-r"); // Reset setting
@@ -538,14 +587,30 @@ void CommandLine::runCommand(String input) {
// Signal strength scan
if (cmd_args.get(0) == SIGSTREN_CMD) {
this->startScanFromCLI(WIFI_SCAN_SIG_STREN, TFT_MAGENTA, "Signal Strength Scan");
/*Serial.println(STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_SIG_STREN, TFT_MAGENTA);*/
wifi_scan_obj.renderPacketRate();
int bt_sw = this->argSearch(&cmd_args, "-b");
int wf_sw = this->argSearch(&cmd_args, "-w");
if (wf_sw > -1) {
int targ_index = cmd_args.get(wf_sw + 1).toInt();
if (targ_index < access_points->size()) {
for (int i = 0; i < access_points->size(); i++) {
AccessPoint access_point = access_points->get(i);
access_point.selected = (i == targ_index);
access_points->set(i, access_point);
}
this->startScanFromCLI(WIFI_SCAN_SIG_STREN, TFT_GREEN, "Fox Hunt");
}
}
else if (bt_sw > -1) {
int targ_index = cmd_args.get(bt_sw + 1).toInt();
if (targ_index < ble_devices->size()) {
for (int i = 0; i < ble_devices->size(); i++) {
BleDevice ble_device = ble_devices->get(i);
ble_device.selected = (i == targ_index);
ble_devices->set(i, ble_device);
}
this->startScanFromCLI(BT_SCAN_FOX_HUNT, TFT_CYAN, "Bluetooth Fox Hunt");
}
}
}
// Packet count
else if (cmd_args.get(0) == PACKET_COUNT_CMD) {
@@ -1262,6 +1327,7 @@ void CommandLine::runCommand(String input) {
int at_sw = this->argSearch(&cmd_args, "-t");
int ip_sw = this->argSearch(&cmd_args, "-i");
int pr_sw = this->argSearch(&cmd_args, "-p");
int bt_sw = this->argSearch(&cmd_args, "-b");
// List APs
if (ap_sw != -1) {
@@ -1276,6 +1342,12 @@ void CommandLine::runCommand(String input) {
}
this->showCounts(count_selected);
}
else if (bt_sw != -1) {
for (int i = 0; i < ble_devices->size(); i++) {
BleDevice ble_device = ble_devices->get(i);
Serial.println("[" + (String)i + "][RSSI:" + (String)ble_device.rssi + "] " + ble_device.name);
}
}
// List IPs
else if (ip_sw != -1) {
for (int i = 0; i < ipList->size(); i++) {
+6 -2
View File
@@ -35,6 +35,7 @@ extern Settings settings_obj;
extern LedInterface led_obj;
#endif
extern LinkedList<AccessPoint>* access_points;
extern LinkedList<BleDevice>* ble_devices;
extern LinkedList<AirTag>* airtags;
extern LinkedList<ssid>* ssids;
extern LinkedList<Station>* stations;
@@ -64,7 +65,7 @@ const char PROGMEM GPS_TRACKER_CMD[] = "gpstracker";
const char PROGMEM EVIL_PORTAL_CMD[] = "evilportal";
const char PROGMEM KARMA_CMD[] = "karma";
const char PROGMEM PACKET_COUNT_CMD[] = "packetcount";
const char PROGMEM SIGSTREN_CMD[] = "sigmon";
const char PROGMEM SIGSTREN_CMD[] = "foxhunt";
const char PROGMEM SCAN_ALL_CMD[] = "scanall";
//const char PROGMEM SCANSTA_CMD[] = "scansta";
const char PROGMEM SNIFF_RAW_CMD[] = "sniffraw";
@@ -109,6 +110,7 @@ const char PROGMEM MAC_CMD_B[] = "randstamac";
const char PROGMEM MAC_CMD_C[] = "cloneapmac";
const char PROGMEM MAC_CMD_D[] = "clonestamac";
const char PROGMEM ADD_CMD[] = "add";
const char PROGMEM UPLOAD_CMD[] = "upload";
// Bluetooth sniff/scan
const char PROGMEM BT_SPAM_CMD[] = "blespam";
@@ -140,7 +142,7 @@ const char PROGMEM HELP_NMEA_CMD[] = "nmea";
const char PROGMEM HELP_EVIL_PORTAL_CMD[] = "evilportal [-c start [-w html.html]/sethtml <html.html>]";
const char PROGMEM HELP_KARMA_CMD[] = "karma -p <index>";
const char PROGMEM HELP_PACKET_COUNT_CMD[] = "packetcount";
const char PROGMEM HELP_SIGSTREN_CMD[] = "sigmon";
const char PROGMEM HELP_SIGSTREN_CMD[] = "foxhunt -b/-w";
const char PROGMEM HELP_SCAN_ALL_CMD[] = "scanall";
//const char PROGMEM HELP_SCANSTA_CMD[] = "scansta";
const char PROGMEM HELP_SNIFF_RAW_CMD[] = "sniffraw";
@@ -169,6 +171,7 @@ const char PROGMEM HELP_LIST_AP_CMD_C[] = "list -c";
const char PROGMEM HELP_LIST_AP_CMD_D[] = "list -t";
const char PROGMEM HELP_LIST_AP_CMD_E[] = "list -i";
const char PROGMEM HELP_LIST_AP_CMD_F[] = "list -p";
const char PROGMEM HELP_LIST_AP_CMD_G[] = "list -b";
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>]";
@@ -182,6 +185,7 @@ const char PROGMEM HELP_MAC_CMD_C[] = "cloneapmac [-a <index>]";
const char PROGMEM HELP_MAC_CMD_D[] = "clonestamac [-s <index>]";
const char PROGMEM HELP_ADD_CMD_A[] = "add -a -b <mac> [-ch <channel>] [-e <ssid>]";
const char PROGMEM HELP_ADD_CMD_B[] = "add -c -b <mac> -ap <ap_index>";
const char PROGMEM HELP_UPLOAD_CMD[] = "upload -d <wdg/wigle/both>";
// Bluetooth sniff/scan
const char PROGMEM HELP_BT_SNIFF_CMD[] = "sniffbt [-t] <airtag/flipper/flock/meta>";
+27 -21
View File
@@ -2635,13 +2635,15 @@ void MenuFunctions::RunSetup()
delay(1000);
for (int i = 0; i < sd_obj.sd_files->size(); i++) {
if (sd_obj.sd_files->get(i).startsWith("wardrive_") || sd_obj.sd_files->get(i).startsWith("wigle-")) {
Serial.println("Uploading " + sd_obj.sd_files->get(i) + "...");
if (wifi_scan_obj.uploadFile("/" + sd_obj.sd_files->get(i), true, WIGLE_UPLOAD)) {
display_obj.clearScreen();
display_obj.showCenterText("WiGLE OK", TFT_HEIGHT / 2);
} else {
display_obj.clearScreen();
display_obj.showCenterText("WiGLE failed", TFT_HEIGHT / 2);
if (!sd_obj.sd_files->get(i).endsWith(".wigle") && !sd_obj.sd_files->get(i).endsWith(".wdg") && !sd_obj.sd_files->get(i).endsWith(".gpx")) {
Serial.println("Uploading " + sd_obj.sd_files->get(i) + "...");
if (wifi_scan_obj.uploadFile("/" + sd_obj.sd_files->get(i), true, WIGLE_UPLOAD)) {
display_obj.clearScreen();
display_obj.showCenterText("WiGLE OK", TFT_HEIGHT / 2);
} else {
display_obj.clearScreen();
display_obj.showCenterText("WiGLE failed", TFT_HEIGHT / 2);
}
}
}
}
@@ -2684,13 +2686,15 @@ void MenuFunctions::RunSetup()
delay(1000);
for (int i = 0; i < sd_obj.sd_files->size(); i++) {
if (sd_obj.sd_files->get(i).startsWith("wardrive_") || sd_obj.sd_files->get(i).startsWith("wigle-")) {
Serial.println("Uploading " + sd_obj.sd_files->get(i) + "...");
if (wifi_scan_obj.uploadFile("/" + sd_obj.sd_files->get(i), true, WDG_UPLOAD)) {
display_obj.clearScreen();
display_obj.showCenterText("WDG OK", TFT_HEIGHT / 2);
} else {
display_obj.clearScreen();
display_obj.showCenterText("WDG failed", TFT_HEIGHT / 2);
if (!sd_obj.sd_files->get(i).endsWith(".wigle") && !sd_obj.sd_files->get(i).endsWith(".wdg") && !sd_obj.sd_files->get(i).endsWith(".gpx")) {
Serial.println("Uploading " + sd_obj.sd_files->get(i) + "...");
if (wifi_scan_obj.uploadFile("/" + sd_obj.sd_files->get(i), true, WDG_UPLOAD)) {
display_obj.clearScreen();
display_obj.showCenterText("WDG OK", TFT_HEIGHT / 2);
} else {
display_obj.clearScreen();
display_obj.showCenterText("WDG failed", TFT_HEIGHT / 2);
}
}
}
}
@@ -2733,13 +2737,15 @@ void MenuFunctions::RunSetup()
delay(1000);
for (int i = 0; i < sd_obj.sd_files->size(); i++) {
if (sd_obj.sd_files->get(i).startsWith("wardrive_") || sd_obj.sd_files->get(i).startsWith("wigle-")) {
Serial.println("Uploading " + sd_obj.sd_files->get(i) + "...");
if (wifi_scan_obj.uploadFile("/" + sd_obj.sd_files->get(i), true, BOTH_UPLOAD)) {
display_obj.clearScreen();
display_obj.showCenterText("Upload OK", TFT_HEIGHT / 2);
} else {
display_obj.clearScreen();
display_obj.showCenterText("Upload failed", TFT_HEIGHT / 2);
if (!sd_obj.sd_files->get(i).endsWith(".wigle") && !sd_obj.sd_files->get(i).endsWith(".wdg") && !sd_obj.sd_files->get(i).endsWith(".gpx")) {
Serial.println("Uploading " + sd_obj.sd_files->get(i) + "...");
if (wifi_scan_obj.uploadFile("/" + sd_obj.sd_files->get(i), true, BOTH_UPLOAD)) {
display_obj.clearScreen();
display_obj.showCenterText("Upload OK", TFT_HEIGHT / 2);
} else {
display_obj.clearScreen();
display_obj.showCenterText("Upload failed", TFT_HEIGHT / 2);
}
}
}
}
+1 -1
View File
@@ -5314,7 +5314,7 @@ void WiFiScan::RunRawScan(uint8_t scan_mode, uint16_t color) {
}
else {
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.drawCentreString("Signal Monitor", TFT_WIDTH / 2, 16, 2);
display_obj.tft.drawCentreString("Fox Hunt", TFT_WIDTH / 2, 16, 2);
}
#endif
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);