CommandLine.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #include "CommandLine.h"
  2. CommandLine::CommandLine() {
  3. }
  4. void CommandLine::RunSetup() {
  5. }
  6. String CommandLine::getSerialInput() {
  7. String input = "";
  8. if (Serial.available() > 0)
  9. input = Serial.readStringUntil('\n');
  10. return input;
  11. }
  12. void CommandLine::main(uint32_t currentTime) {
  13. String input = this->getSerialInput();
  14. this->runCommand(input);
  15. }
  16. LinkedList<String> CommandLine::parseCommand(String input) {
  17. LinkedList<String> cmd_args;
  18. if (input != "") {
  19. char delim[] = " ";
  20. char fancy[input.length() + 1] = {};
  21. input.toCharArray(fancy, input.length() + 1);
  22. char* ptr = strtok(fancy, delim);
  23. while (ptr != NULL) {
  24. cmd_args.add(String(ptr));
  25. ptr = strtok(NULL, delim);
  26. }
  27. //memset(fancy, 0, sizeof(fancy));
  28. // Display the segmented cmd
  29. //for (int i = 0; i < cmd_args.size(); i++) {
  30. // Serial.println(cmd_args.get(i));
  31. //}
  32. }
  33. return cmd_args;
  34. }
  35. int CommandLine::argSearch(LinkedList<String>* cmd_args_list, String key) {
  36. for (int i = 0; i < cmd_args_list->size(); i++) {
  37. if (cmd_args_list->get(i) == key)
  38. return i;
  39. }
  40. return -1;
  41. }
  42. void CommandLine::runCommand(String input) {
  43. if (input != "")
  44. Serial.println("#" + input);
  45. else
  46. return;
  47. LinkedList<String> cmd_args = this->parseCommand(input);
  48. //// Admin commands
  49. // Stop Scan
  50. if (cmd_args.get(0) == STOPSCAN_CMD) {
  51. wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
  52. // If we don't do this, the text and button coordinates will be off
  53. #ifdef HAS_SCREEN
  54. display_obj.tft.init();
  55. menu_function_obj.changeMenu(menu_function_obj.current_menu);
  56. #endif
  57. }
  58. // Channel command
  59. else if (cmd_args.get(0) == CH_CMD) {
  60. // Search for channel set arg
  61. int ch_set = this->argSearch(&cmd_args, "-s");
  62. if (cmd_args.size() == 1) {
  63. Serial.println("Current channel: " + (String)wifi_scan_obj.set_channel);
  64. }
  65. else if (ch_set != -1) {
  66. wifi_scan_obj.set_channel = cmd_args.get(ch_set + 1).toInt();
  67. wifi_scan_obj.changeChannel();
  68. Serial.println("Set channel: " + (String)wifi_scan_obj.set_channel);
  69. }
  70. }
  71. // Clear APs
  72. else if (cmd_args.get(0) == CLEARAP_CMD) {
  73. wifi_scan_obj.RunClearAPs();
  74. }
  75. //// WiFi Scan commands
  76. if (!wifi_scan_obj.scanning()) {
  77. // AP Scan
  78. if (cmd_args.get(0) == SCANAP_CMD) {
  79. #ifdef HAS_SCREEN
  80. display_obj.clearScreen();
  81. menu_function_obj.drawStatusBar();
  82. #endif
  83. wifi_scan_obj.StartScan(WIFI_SCAN_TARGET_AP, TFT_MAGENTA);
  84. }
  85. // Beacon sniff
  86. else if (cmd_args.get(0) == SNIFF_BEACON_CMD) {
  87. #ifdef HAS_SCREEN
  88. display_obj.clearScreen();
  89. menu_function_obj.drawStatusBar();
  90. #endif
  91. wifi_scan_obj.StartScan(WIFI_SCAN_AP, TFT_MAGENTA);
  92. }
  93. // Deauth sniff
  94. else if (cmd_args.get(0) == SNIFF_DEAUTH_CMD) {
  95. #ifdef HAS_SCREEN
  96. display_obj.clearScreen();
  97. menu_function_obj.drawStatusBar();
  98. #endif
  99. wifi_scan_obj.StartScan(WIFI_SCAN_DEAUTH, TFT_RED);
  100. }
  101. // PMKID sniff
  102. else if (cmd_args.get(0) == SNIFF_PMKID_CMD) {
  103. wifi_scan_obj.StartScan(WIFI_SCAN_EAPOL, TFT_VIOLET);
  104. }
  105. }
  106. }