From 77773661d5ebc48e524221a1486d10eb67c4b269 Mon Sep 17 00:00:00 2001 From: Felix Pankratz Date: Sun, 29 Oct 2023 15:35:54 +0100 Subject: [PATCH] use the ring --- src/lwip_hooks.c | 4 +-- src/main.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 67 insertions(+), 8 deletions(-) diff --git a/src/lwip_hooks.c b/src/lwip_hooks.c index f645a8f..f457d0f 100644 --- a/src/lwip_hooks.c +++ b/src/lwip_hooks.c @@ -1,6 +1,6 @@ // file: #include "lwip_hooks.h" -extern void log_packet(uint16_t); +extern void log_packet(uint16_t, u16_t); const char *get_protocol(u16_t type) { @@ -44,7 +44,7 @@ int lwip_hook_ip4_input(struct pbuf *pbuf, struct netif *input_netif) ESP_LOGI("HOOK", "%s: %s %u", get_protocol((u16_t)IPH_PROTO(iphdr)), ip_address, port); - log_packet(port); + log_packet(port, (u16_t)IPH_PROTO(iphdr)); return ESP_OK; } diff --git a/src/main.cpp b/src/main.cpp index 466a701..63838fb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,20 +3,73 @@ #include "WiFi.h" #include -#define NUMPIXELS 1 -#define PIN_NEOPIXEL 39 +#define NUMPIXELS 8 +#define PIN_NEOPIXEL_ONBOARD 39 +#define PIN_NEOPIXEL 9 #define NEOPIXEL_POWER 38 +#define PROTO_ICMP 1 +#define PROTO_TCP 6 +#define PROTO_UDP 17 + char ssid[] = "MyWifi"; // your network SSID (name) char pass[] = "MyPassphrase"; // your network password (use for WPA, or use as key for WEP) Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800); +Adafruit_NeoPixel onboard_pixel(1, PIN_NEOPIXEL_ONBOARD, NEO_GRB + NEO_KHZ800); + +void ssh_attempt() { + printf("Someone connected to SSH!"); + pixels.fill(pixels.Color(255, 0, 0)); + pixels.show(); + delay(200); + pixels.clear(); + pixels.show(); + delay(100); + pixels.fill(pixels.Color(255, 0, 0)); + pixels.show(); + delay(200); + pixels.fill(pixels.Color(0,0,0)); + pixels.show(); +} + +void icmp_ping() { + pixels.setPixelColor(2, pixels.Color(255, 255, 255)); + pixels.setPixelColor(3, pixels.Color(255, 255, 255)); + pixels.setPixelColor(6, pixels.Color(255, 255, 255)); + pixels.setPixelColor(7, pixels.Color(255, 255, 255)); + pixels.show(); + delay(100); + pixels.setPixelColor(2, 0); + pixels.setPixelColor(3, 0); + pixels.setPixelColor(6, 0); + pixels.setPixelColor(7, 0); + pixels.show(); +} extern "C" { - void log_packet(uint16_t port) { + void log_packet(uint16_t port, u16_t proto) { if (WiFi.status() == WL_CONNECTED) { - pixels.rainbow(port); - pixels.show(); + uint32_t color = pixels.ColorHSV(port); + switch (proto) { + case PROTO_ICMP: + icmp_ping(); + break; + case PROTO_TCP: + if (port == 22) { + ssh_attempt(); + } else { + pixels.setPixelColor(0, color); + pixels.setPixelColor(1, color); + pixels.show(); + } + break; + case PROTO_UDP: + pixels.setPixelColor(4, color); + pixels.setPixelColor(5, color); + pixels.show(); + break; + } } } } @@ -33,14 +86,20 @@ extern "C" void app_main() digitalWrite(NEOPIXEL_POWER, HIGH); #endif pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED) + onboard_pixel.begin(); // INITIALIZE NeoPixel strip object (REQUIRED) pixels.setBrightness(20); // not so bright + onboard_pixel.setBrightness(20); printf("Connecting"); + onboard_pixel.fill(onboard_pixel.Color(255, 255, 0)); + onboard_pixel.show(); WiFi.begin(ssid, pass); - while (WiFi.status() != WL_CONNECTED) { + while (WiFi.status() != WL_CONNECTED) { delay(500); printf("."); } + onboard_pixel.fill(onboard_pixel.Color(0, 255, 0)); + onboard_pixel.show(); printf("\nConnected!\n"); printf("SSID: %s\n", WiFi.SSID().c_str()); printf("IP: %s\n", WiFi.localIP().toString().c_str());