Advertisement
nene1234

vector not work

Jul 3rd, 2025
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.68 KB | None | 0 0
  1. #include <lilka.h>
  2. #include "ipapp.h"
  3. #include "servicemanager.h"
  4. #include "services/network.h"
  5.  
  6. extern "C" {
  7. #include "lwip/etharp.h"
  8. #include "lwip/netif.h"
  9. #include "lwip/ip_addr.h"
  10. }
  11.  
  12. IPApp::IPApp() : App("IP Address") {}
  13.  
  14. void IPApp::scanNetwork(std::vector<ScanResult>& results) {
  15.     results.clear();
  16.     struct netif* netif = netif_list;
  17.     IPAddress localIP = WiFi.localIP();
  18.     IPAddress subnetMask = WiFi.subnetMask();
  19.     uint32_t ip = (uint32_t)localIP;
  20.     uint32_t mask = (uint32_t)subnetMask;
  21.     uint32_t network = ip & mask;
  22.     uint32_t broadcast = network | ~mask;
  23.  
  24.     // Відправляємо ARP-запити до всіх адрес у підмережі
  25.     for (uint32_t addr = network + 1; addr < broadcast; ++addr) {
  26.         IPAddress targetIP(addr);
  27.         ip4_addr_t target_ip;
  28.         ip4addr_aton(targetIP.toString().c_str(), &target_ip);
  29.         etharp_request(netif, &target_ip);
  30.         vTaskDelay(10 / portTICK_PERIOD_MS);
  31.     }
  32.     vTaskDelay(1000 / portTICK_PERIOD_MS);
  33.  
  34.     // Збираємо знайдені IP–MAC
  35.     for (uint32_t addr = network + 1; addr < broadcast; ++addr) {
  36.         IPAddress ip(addr);
  37.         ip4_addr_t target_ip;
  38.         ip4addr_aton(ip.toString().c_str(), &target_ip);
  39.         struct eth_addr *eth_ret;
  40.         const ip4_addr_t *ip_ret;
  41.         if (etharp_find_addr(netif, &target_ip, &eth_ret, &ip_ret) >= 0) {
  42.             ScanResult res;
  43.             res.ip = ip;
  44.             memcpy(res.mac, eth_ret->addr, 6);
  45.             results.push_back(res);
  46.         }
  47.     }
  48. }
  49.  
  50. const char* lookupVendor(const uint8_t mac[6]);
  51.  
  52. void IPApp::run() {
  53.     std::vector<ScanResult> arpResults;
  54.     scanNetwork(arpResults);
  55.  
  56.     lilka::Menu menu("ARP scan");
  57.     menu.addActivationButton(lilka::Button::B); // Back
  58.     menu.addActivationButton(lilka::Button::C);
  59.     if (arpResults.empty()) {
  60.         menu.addItem("No devices found");
  61.     } else {
  62.         for (const auto& entry : arpResults) {
  63.             char macbuf[18];
  64.             snprintf(macbuf, sizeof(macbuf), "%02X:%02X:%02X:%02X:%02X:%02X",
  65.                 entry.mac[0], entry.mac[1], entry.mac[2],
  66.                 entry.mac[3], entry.mac[4], entry.mac[5]);
  67.             menu.addItem(entry.ip.toString() + " - " + String(macbuf));
  68.         }
  69.     }
  70.     menu.addItem("Оновити");
  71.     menu.addItem("Назад");
  72.     int count = (int)arpResults.size() + 2;
  73.     if (arpResults.empty()) count = 3;
  74.  
  75.     while (true) {
  76.         while (!menu.isFinished()) {
  77.             menu.update();
  78.             menu.draw(canvas);
  79.             queueDraw();
  80.         }
  81.         int cursor = menu.getCursor();
  82.         if (cursor == count - 1 || menu.getButton() == lilka::Button::B) {
  83.             return;
  84.         }
  85.         if (cursor == count - 2) { // Оновити
  86.             arpResults.clear();
  87.             menu.clearItems();
  88.             scanNetwork(arpResults);
  89.             if (arpResults.empty()) {
  90.                 menu.addItem("No devices found");
  91.             } else {
  92.                 for (const auto& entry : arpResults) {
  93.                     char macbuf[18];
  94.                     snprintf(macbuf, sizeof(macbuf), "%02X:%02X:%02X:%02X:%02X:%02X",
  95.                         entry.mac[0], entry.mac[1], entry.mac[2],
  96.                         entry.mac[3], entry.mac[4], entry.mac[5]);
  97.                     menu.addItem(entry.ip.toString() + " - " + String(macbuf));
  98.                 }
  99.             }
  100.             menu.addItem("Оновити");
  101.             menu.addItem("Назад");
  102.             continue;
  103.         }
  104.         if (menu.getButton() == lilka::Button::C && !arpResults.empty() && cursor < (int)arpResults.size()) {
  105.             const ScanResult& entry = arpResults[cursor];
  106.             char macbuf[18];
  107.             snprintf(macbuf, sizeof(macbuf), "%02X:%02X:%02X:%02X:%02X:%02X",
  108.                 entry.mac[0], entry.mac[1], entry.mac[2],
  109.                 entry.mac[3], entry.mac[4], entry.mac[5]);
  110.             const char* vendor = lookupVendor(entry.mac);
  111.             String info = "IP: " + entry.ip.toString() + "\nMAC: " + String(macbuf);
  112.             if (vendor && String(vendor) != "Unknown") {
  113.                 info += "\nVendor: ";
  114.                 info += vendor;
  115.             }
  116.             lilka::Alert alert("Device info", info);
  117.             while (!alert.isFinished()) {
  118.                 alert.update();
  119.                 alert.draw(canvas);
  120.                 queueDraw();
  121.             }
  122.             continue;
  123.         }
  124.         // Якщо вибрано "No devices found" — просто оновити меню (нічого не робимо)
  125.     }
  126. }
  127.  
  128. // --- Додаємо структуру та масив OUI-вендорів ---
  129. const MacVendor macVendors[] = VENDORS_LIST_INITIALIZER;
  130. const int macVendorsCount = sizeof(macVendors) / sizeof(macVendors[0]);
  131.  
  132. // Функція для пошуку вендора за MAC
  133. const char* lookupVendor(const uint8_t mac[6]) {
  134.     uint32_t target = (mac[0] << 16) | (mac[1] << 8) | mac[2];
  135.     int left = 0, right = macVendorsCount - 1;
  136.     while (left <= right) {
  137.         int mid = (left + right) / 2;
  138.         uint32_t midOUI = (macVendors[mid].oui[0] << 16) | (macVendors[mid].oui[1] << 8) | macVendors[mid].oui[2];
  139.         if (target == midOUI) return macVendors[mid].vendor;
  140.         if (target < midOUI) right = mid - 1;
  141.         else left = mid + 1;
  142.     }
  143.     return "Unknown";
  144. }
  145.  
  146.  
  147.  
  148.  
  149. #ifndef IPAPP_H
  150. #define IPAPP_H
  151.  
  152. #include <lilka.h>
  153. #include "app.h"
  154. #include "services/network.h"
  155. #include <vector>
  156.  
  157. struct MacVendor {
  158.     uint8_t oui[3];
  159.     char vendor[32];
  160. };
  161.  
  162. #define VENDORS_LIST_INITIALIZER { \
  163.     { {0x00,0x00,0xF0}, "Samsung" }, \
  164.     { {0x00,0x02,0x78}, "Samsung" }, \
  165.     { {0x00,0x07,0xAB}, "Samsung" }, \
  166.     { {0x00,0x09,0x18}, "Samsung" }, \
  167.     { {0x00,0x0A,0xEB}, "TP-LINK" }, \
  168.     { {0x00,0x0D,0xAE}, "Samsung" }, \
  169.     { {0x00,0x0D,0xE5}, "Samsung" }, \
  170.     { {0x00,0x11,0x32}, "Synology" }, \
  171.     { {0x00,0x12,0x47}, "Samsung" }, \
  172.     { {0x00,0x12,0xFB}, "Samsung" }, \
  173.     { {0x00,0x13,0x77}, "Samsung" }, \
  174.     { {0x00,0x14,0x78}, "TP-LINK" }, \
  175.     { {0x00,0x15,0x99}, "Samsung" }, \
  176.     { {0x00,0x15,0xB9}, "Samsung" }, \
  177.     { {0x00,0x16,0x32}, "Samsung" }, \
  178.     { {0x00,0x16,0x6B}, "Samsung" }, \
  179.     { {0x00,0x16,0x6C}, "Samsung" }, \
  180.     { {0x00,0x16,0xDB}, "Samsung" }, \
  181.     { {0x00,0x17,0xC9}, "Samsung" }, \
  182.     { {0x00,0x17,0xD5}, "Samsung" }, \
  183.     { {0x00,0x18,0xAF}, "Samsung" }, \
  184.     { {0x00,0x19,0xE0}, "TP-LINK" }, \
  185.     { {0x00,0x1A,0x79}, "Apple" }, \
  186.     { {0x00,0x1A,0x8A}, "Samsung" }, \
  187.     { {0x00,0x1B,0x63}, "Cisco" }, \
  188.     { {0x00,0x1B,0x98}, "Samsung" }, \
  189.     { {0x00,0x1C,0x43}, "Samsung" }, \
  190.     { {0x00,0x1C,0xBF}, "Samsung" }, \
  191.     { {0x00,0x1D,0x0F}, "TP-LINK" }, \
  192.     { {0x00,0x1D,0x25}, "Samsung" }, \
  193.     { {0x00,0x1D,0xD8}, "Huawei" }, \
  194.     { {0x00,0x1D,0xF6}, "Samsung" }, \
  195.     { {0x00,0x1E,0x7D}, "Samsung" }, \
  196.     { {0x00,0x1E,0xC2}, "Intel" }, \
  197.     { {0x00,0x1E,0xE1}, "Samsung" }, \
  198.     { {0x00,0x1E,0xE2}, "Samsung" }, \
  199.     { {0x00,0x1F,0xCC}, "Samsung" }, \
  200.     { {0x00,0x1F,0xCD}, "Samsung" }, \
  201.     { {0x00,0x21,0x27}, "TP-LINK" }, \
  202.     { {0x00,0x21,0x4C}, "Samsung" }, \
  203.     { {0x00,0x21,0x6A}, "TP-Link" }, \
  204.     { {0x00,0x21,0xD1}, "Samsung" }, \
  205.     { {0x00,0x21,0xD2}, "Samsung" }, \
  206.     { {0x00,0x22,0x43}, "Xiaomi" }, \
  207.     { {0x00,0x23,0x39}, "Samsung" }, \
  208.     { {0x00,0x23,0x3A}, "Samsung" }, \
  209.     { {0x00,0x23,0x69}, "LG" }, \
  210.     { {0x00,0x23,0x99}, "Samsung" }, \
  211.     { {0x00,0x23,0xC2}, "Samsung" }, \
  212.     { {0x00,0x23,0xCD}, "TP-LINK" }, \
  213.     { {0x00,0x23,0xD6}, "Samsung" }, \
  214.     { {0x00,0x23,0xD7}, "Samsung" }, \
  215.     { {0x00,0x24,0x54}, "Samsung" }, \
  216.     { {0x00,0x24,0x90}, "Samsung" }, \
  217.     { {0x00,0x24,0x91}, "Samsung" }, \
  218.     { {0x00,0x24,0xE8}, "Dell" }, \
  219.     { {0x00,0x24,0xE9}, "Samsung" }, \
  220.     { {0x00,0x25,0x38}, "Samsung" }, \
  221.     { {0x00,0x25,0x66}, "Samsung" }, \
  222.     { {0x00,0x25,0x67}, "Samsung" }, \
  223.     { {0x00,0x25,0x86}, "TP-LINK" }, \
  224.     { {0x00,0x25,0x9C}, "HP" }, \
  225.     { {0x00,0x26,0x18}, "Asus" }, \
  226.     { {0x00,0x26,0x37}, "Samsung" }, \
  227.     { {0x00,0x26,0x5D}, "Samsung" }, \
  228.     { {0x00,0x26,0x5F}, "Samsung" }, \
  229.     { {0x00,0x27,0x0E}, "Realtek" }, \
  230.     { {0x00,0x27,0x19}, "TP-LINK" }, \
  231.     { {0x00,0x28,0xF8}, "Amazon" }, \
  232.     { {0x00,0x30,0x65}, "Google" }, \
  233.     { {0x00,0x50,0x56}, "VMware" }, \
  234.     { {0x00,0x60,0x2F}, "Microsoft" }, \
  235.     { {0x00,0x6F,0x64}, "Samsung" }, \
  236.     { {0x00,0x73,0xE0}, "Samsung" }, \
  237.     { {0x00,0x80,0x41}, "Motorola" }, \
  238.     { {0x00,0x87,0x01}, "Samsung" }, \
  239.     { {0x00,0x90,0x4C}, "Sony" }, \
  240.     { {0x00,0x9E,0xC8}, "Xiaomi" }, \
  241.     { {0x00,0xA0,0xC9}, "Cisco" }, \
  242.     { {0x00,0xB0,0x52}, "Panasonic" }, \
  243.     { {0x00,0xC0,0xCA}, "Toshiba" }, \
  244.     { {0x00,0xD0,0x59}, "Sharp" }, \
  245.     { {0x00,0xE0,0x4C}, "Nokia" }, \
  246.     { {0x00,0xE0,0x64}, "Samsung" }, \
  247.     { {0x00,0xE3,0xB2}, "Samsung" }, \
  248.     { {0x00,0xF0,0x1C}, "Lenovo" }, \
  249.     { {0x00,0xF4,0x6F}, "Samsung" }, \
  250.     { {0x08,0x1F,0x71}, "TP-LINK" }, \
  251.     { {0x08,0x57,0x00}, "TP-LINK" }, \
  252.     { {0x0C,0x1D,0xAF}, "Xiaomi" }, \
  253.     { {0x0C,0x72,0x2C}, "TP-LINK" }, \
  254.     { {0x0C,0x82,0x68}, "TP-LINK" }, \
  255.     { {0x10,0x2A,0xB3}, "Xiaomi" }, \
  256.     { {0x10,0x27,0xBE}, "Apple" }, \
  257.     { {0x10,0x68,0x3F}, "Apple" }, \
  258.     { {0x10,0xFE,0xED}, "TP-LINK" }, \
  259.     { {0x14,0x75,0x90}, "TP-LINK" }, \
  260.     { {0x14,0x86,0x92}, "TP-LINK" }, \
  261.     { {0x14,0xCC,0x20}, "TP-LINK" }, \
  262.     { {0x14,0xCF,0x92}, "TP-LINK" }, \
  263.     { {0x14,0xE6,0xE4}, "TP-LINK" }, \
  264.     { {0x14,0xF6,0x5A}, "Xiaomi" }, \
  265.     { {0x18,0x59,0x36}, "Xiaomi" }, \
  266.     { {0x18,0x65,0x90}, "Apple" }, \
  267.     { {0x18,0xA6,0xF7}, "Samsung" }, \
  268.     { {0x18,0xA6,0xF7}, "TP-LINK" }, \
  269.     { {0x18,0xD6,0xC7}, "TP-LINK" }, \
  270.     { {0x18,0xFE,0x34}, "Espressif" }, \
  271.     { {0x1C,0x1A,0xC0}, "Apple" }, \
  272.     { {0x1C,0x44,0x19}, "TP-LINK" }, \
  273.     { {0x1C,0xFA,0x68}, "TP-LINK" }, \
  274.     { {0x20,0x82,0xC0}, "Xiaomi" }, \
  275.     { {0x20,0xDC,0xE6}, "TP-LINK" }, \
  276.     { {0x20,0xF8,0x3B}, "Home Assistant" }, \
  277.     { {0x24,0x0A,0xC4}, "Espressif" }, \
  278.     { {0x24,0x4B,0xFE}, "Apple" }, \
  279.     { {0x24,0x69,0x68}, "TP-LINK" }, \
  280.     { {0x28,0x2C,0xB2}, "TP-LINK" }, \
  281.     { {0x28,0x6C,0x07}, "Xiaomi" }, \
  282.     { {0x28,0xE3,0x1F}, "Xiaomi" }, \
  283.     { {0x28,0xEE,0x52}, "TP-LINK" }, \
  284.     { {0x2C,0x54,0xCF}, "TP-Link" }, \
  285.     { {0x30,0x07,0x4D}, "Apple" }, \
  286.     { {0x30,0xAE,0xA4}, "Espressif" }, \
  287.     { {0x30,0xB4,0x9E}, "TP-LINK" }, \
  288.     { {0x30,0xB5,0xC2}, "TP-LINK" }, \
  289.     { {0x30,0xFC,0x68}, "TP-LINK" }, \
  290.     { {0x34,0x36,0x3B}, "Apple" }, \
  291.     { {0x34,0x80,0xB3}, "Xiaomi" }, \
  292.     { {0x34,0x96,0x72}, "TP-LINK" }, \
  293.     { {0x34,0xCE,0x00}, "Xiaomi" }, \
  294.     { {0x38,0x83,0x45}, "TP-LINK" }, \
  295.     { {0x38,0xA4,0xED}, "Xiaomi" }, \
  296.     { {0x38,0xC9,0x86}, "Apple" }, \
  297.     { {0x3C,0x46,0xD8}, "TP-LINK" }, \
  298.     { {0x3C,0x5A,0xB4}, "Apple" }, \
  299.     { {0x3C,0xBD,0x3E}, "Xiaomi" }, \
  300.     { {0x40,0x16,0x9F}, "TP-LINK" }, \
  301.     { {0x40,0x3F,0x8C}, "TP-LINK" }, \
  302.     { {0x40,0x4E,0x36}, "Apple" }, \
  303.     { {0x44,0x2A,0x60}, "Apple" }, \
  304.     { {0x44,0xB3,0x2D}, "TP-LINK" }, \
  305.     { {0x48,0x5A,0x3F}, "Apple" }, \
  306.     { {0x4C,0x32,0x75}, "Apple" }, \
  307.     { {0x50,0x2C,0xC6}, "Unknown" }, \
  308.     { {0x50,0xBD,0x5F}, "TP-LINK" }, \
  309.     { {0x50,0xC7,0xBF}, "TP-LINK" }, \
  310.     { {0x50,0xFA,0x84}, "TP-LINK" }, \
  311.     { {0x54,0x27,0x1E}, "Apple" }, \
  312.     { {0x54,0x5A,0xA6}, "Espressif" }, \
  313.     { {0x54,0xC8,0x0F}, "TP-LINK" }, \
  314.     { {0x54,0xE6,0xFC}, "TP-LINK" }, \
  315.     { {0x58,0x44,0x98}, "Xiaomi" }, \
  316.     { {0x58,0x55,0xCA}, "Apple" }, \
  317.     { {0x5C,0x59,0x48}, "Apple" }, \
  318.     { {0x5C,0x63,0xBF}, "TP-LINK" }, \
  319.     { {0x5C,0x89,0x9A}, "TP-LINK" }, \
  320.     { {0x5C,0xCF,0x7F}, "Espressif" }, \
  321.     { {0x60,0x01,0x94}, "Espressif" }, \
  322.     { {0x60,0xE3,0x27}, "TP-LINK" }, \
  323.     { {0x64,0x09,0x80}, "Xiaomi" }, \
  324.     { {0x64,0x56,0x01}, "TP-LINK" }, \
  325.     { {0x64,0x66,0xB3}, "TP-LINK" }, \
  326.     { {0x64,0x70,0x02}, "TP-LINK" }, \
  327.     { {0x64,0xB4,0x73}, "Xiaomi" }, \
  328.     { {0x64,0xCC,0x2E}, "Xiaomi" }, \
  329.     { {0x68,0x5B,0x35}, "Apple" }, \
  330.     { {0x68,0xDF,0xDD}, "Xiaomi" }, \
  331.     { {0x6C,0x40,0x08}, "Apple" }, \
  332.     { {0x6C,0xE8,0x73}, "TP-LINK" }, \
  333.     { {0x70,0x3A,0x51}, "Apple" }, \
  334.     { {0x70,0x4F,0x57}, "TP-LINK" }, \
  335.     { {0x74,0x23,0x44}, "Xiaomi" }, \
  336.     { {0x74,0x51,0xBA}, "Xiaomi" }, \
  337.     { {0x74,0xE2,0xF5}, "Apple" }, \
  338.     { {0x74,0xEA,0x3A}, "TP-LINK" }, \
  339.     { {0x78,0x02,0xF8}, "Xiaomi" }, \
  340.     { {0x78,0x31,0xC1}, "Apple" }, \
  341.     { {0x78,0xA1,0x06}, "TP-LINK" }, \
  342.     { {0x7C,0x1D,0xD9}, "Xiaomi" }, \
  343.     { {0x7C,0x6D,0x62}, "Apple" }, \
  344.     { {0x80,0x89,0x17}, "TP-LINK" }, \
  345.     { {0x80,0xEA,0x96}, "Apple" }, \
  346.     { {0x84,0x16,0xF9}, "TP-LINK" }, \
  347.     { {0x84,0x38,0x35}, "Apple" }, \
  348.     { {0x88,0x1F,0xA1}, "Apple" }, \
  349.     { {0x88,0x25,0x93}, "TP-LINK" }, \
  350.     { {0x8C,0x21,0x0A}, "TP-LINK" }, \
  351.     { {0x8C,0xA6,0xDF}, "TP-LINK" }, \
  352.     { {0x8C,0xBE,0xBE}, "Xiaomi" }, \
  353.     { {0x90,0x27,0xE4}, "Apple" }, \
  354.     { {0x90,0x97,0xD5}, "Espressif" }, \
  355.     { {0x90,0xAE,0x1B}, "TP-LINK" }, \
  356.     { {0x90,0xF6,0x52}, "TP-LINK" }, \
  357.     { {0x94,0x0C,0x6D}, "TP-LINK" }, \
  358.     { {0x94,0xE9,0x79}, "Apple" }, \
  359.     { {0x98,0x01,0xA7}, "Apple" }, \
  360.     { {0x98,0xDE,0xD0}, "TP-LINK" }, \
  361.     { {0x98,0xFA,0xE3}, "Xiaomi" }, \
  362.     { {0x9C,0x20,0x7B}, "Apple" }, \
  363.     { {0x9C,0x21,0x6A}, "TP-LINK" }, \
  364.     { {0x9C,0x99,0xA0}, "Xiaomi" }, \
  365.     { {0xA0,0x20,0xA6}, "Espressif" }, \
  366.     { {0xA0,0x86,0xC6}, "Xiaomi" }, \
  367.     { {0xA0,0x99,0x9B}, "Apple" }, \
  368.     { {0xA0,0xF3,0xC1}, "TP-LINK" }, \
  369.     { {0xA4,0x2B,0xB0}, "TP-LINK" }, \
  370.     { {0xA4,0x5E,0x60}, "Apple" }, \
  371.     { {0xA8,0x15,0x4D}, "TP-LINK" }, \
  372.     { {0xA8,0x20,0x66}, "Apple" }, \
  373.     { {0xA8,0x57,0x4E}, "TP-LINK" }, \
  374.     { {0xAC,0xBC,0x32}, "Apple" }, \
  375.     { {0xAC,0xC1,0xEE}, "Xiaomi" }, \
  376.     { {0xAC,0xD0,0x74}, "Espressif" }, \
  377.     { {0xAC,0xF7,0xF3}, "Xiaomi" }, \
  378.     { {0xB0,0x48,0x7A}, "TP-LINK" }, \
  379.     { {0xB0,0x95,0x8E}, "TP-LINK" }, \
  380.     { {0xB0,0x99,0xD7}, "Samsung" }, \
  381.     { {0xB0,0xE2,0x35}, "Xiaomi" }, \
  382.     { {0xB4,0x18,0xD1}, "Apple" }, \
  383.     { {0xB8,0x17,0xC2}, "Apple" }, \
  384.     { {0xB8,0x27,0xEB}, "Raspberry Pi" }, \
  385.     { {0xB8,0xF8,0x83}, "TP-LINK" }, \
  386.     { {0xBC,0x46,0x99}, "TP-LINK" }, \
  387.     { {0xBC,0xD1,0x77}, "TP-LINK" }, \
  388.     { {0xC0,0x25,0xE9}, "TP-LINK" }, \
  389.     { {0xC0,0x4A,0x00}, "TP-LINK" }, \
  390.     { {0xC0,0x61,0x18}, "TP-LINK" }, \
  391.     { {0xC0,0xE4,0x2D}, "TP-LINK" }, \
  392.     { {0xC4,0x6E,0x1F}, "TP-LINK" }, \
  393.     { {0xC4,0xE9,0x84}, "TP-LINK" }, \
  394.     { {0xCC,0x34,0x29}, "TP-LINK" }, \
  395.     { {0xD0,0xC7,0xC0}, "TP-LINK" }, \
  396.     { {0xD4,0x01,0x6D}, "TP-LINK" }, \
  397.     { {0xD4,0x6E,0x0E}, "TP-LINK" }, \
  398.     { {0xD8,0x15,0x0D}, "TP-LINK" }, \
  399.     { {0xD8,0x5D,0x4C}, "TP-LINK" }, \
  400.     { {0xDC,0x00,0x77}, "TP-LINK" }, \
  401.     { {0xDC,0xFE,0x18}, "TP-LINK" }, \
  402.     { {0xE0,0x05,0xC5}, "TP-LINK" }, \
  403.     { {0xE4,0xD3,0x32}, "TP-LINK" }, \
  404.     { {0xE8,0x94,0xF6}, "TP-LINK" }, \
  405.     { {0xE8,0xDE,0x27}, "TP-LINK" }, \
  406.     { {0xEC,0x08,0x6B}, "TP-LINK" }, \
  407.     { {0xEC,0x17,0x2F}, "TP-LINK" }, \
  408.     { {0xEC,0x26,0xCA}, "TP-LINK" }, \
  409.     { {0xEC,0x88,0x8F}, "TP-LINK" }, \
  410.     { {0xF0,0xF3,0x36}, "TP-LINK" }, \
  411.     { {0xF4,0x83,0xCD}, "TP-LINK" }, \
  412.     { {0xF4,0xEC,0x38}, "TP-LINK" }, \
  413.     { {0xF4,0xF2,0x6D}, "TP-LINK" }, \
  414.     { {0xF8,0x1A,0x67}, "TP-LINK" }, \
  415.     { {0xF8,0xD1,0x11}, "TP-LINK" }, \
  416.     { {0xFC,0xD7,0x33}, "TP-LINK" } \
  417. }
  418.  
  419. struct ScanResult {
  420.     IPAddress ip;
  421.     uint8_t mac[6];
  422. };
  423.  
  424. class IPApp : public App {
  425. public:
  426.     IPApp();
  427. private:
  428.     void run() override;
  429.     void scanNetwork(std::vector<ScanResult>& results);
  430.     lilka::Menu menu;
  431. };
  432.  
  433. #endif
  434.  
  435.  
  436.  
  437.  
  438.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement