#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "pico/stdlib.h"
// Definição dos pinos dos LEDs e do buzzer
#define PINO_LED_VERMELHO 1
#define PINO_LED_VERDE 2
#define PINO_LED_AZUL 3
#define PINO_BUZZER 4
// Frequência do som do buzzer em Hertz
#define FREQUENCIA_BUZZER 1000
// Função para emitir som no buzzer
void emitir_som(uint duracao_ms) {
uint periodo_us = 1000000 / FREQUENCIA_BUZZER;
uint meio_periodo_us = periodo_us / 2;
uint tempo_passado = 0;
while (tempo_passado < duracao_ms * 1000) {
gpio_put(PINO_BUZZER, 1);
sleep_us(meio_periodo_us);
gpio_put(PINO_BUZZER, 0);
sleep_us(meio_periodo_us);
tempo_passado += periodo_us;
}
}
// Simula a análise de pacotes de rede e detecção de padrões suspeitos
void analisar_pacotes_rede() {
printf("Analisando pacotes de rede...\n");
uint8_t ataque_detectado = rand() % 3;
const char* tipo_ataque;
const char* nivel_risco;
uint pino_led;
switch (ataque_detectado) {
case 0:
tipo_ataque = "DDoS";
nivel_risco = "Alto";
pino_led = PINO_LED_VERMELHO;
break;
case 1:
tipo_ataque = "Acesso não autorizado";
nivel_risco = "Alto";
pino_led = PINO_LED_VERDE;
break;
case 2:
tipo_ataque = "Varredura de portas";
nivel_risco = "Baixo";
pino_led = PINO_LED_AZUL;
break;
default:
tipo_ataque = "Nenhum";
nivel_risco = "N/A";
pino_led = 0;
break;
}
if (ataque_detectado != 3) {
// Simula a hora atual (já que Wokwi não fornece RTC)
struct tm hora_simulada = {
.tm_year = 2025 - 1900,
.tm_mon = 7,
.tm_mday = 13,
.tm_hour = 19,
.tm_min = 20,
.tm_sec = 0,
};
time_t t = mktime(&hora_simulada);
struct tm *info_tempo = localtime(&t);
char buffer[64];
strftime(buffer, 64, "%d-%m-%Y %H:%M:%S", info_tempo);
printf("Ataque detectado: %s\nHora: %s\nRisco: %s\n", tipo_ataque, buffer, nivel_risco);
for (int i = 0; i < 5; i++) {
gpio_put(pino_led, 1);
emitir_som(500);
gpio_put(pino_led, 0);
sleep_ms(500);
}
} else {
printf("Nenhum comportamento suspeito detectado.\n");
gpio_put(PINO_BUZZER, 0);
}
}
// Função de configuração inicial
void configurar() {
stdio_init_all();
gpio_init(PINO_LED_VERMELHO);
gpio_set_dir(PINO_LED_VERMELHO, GPIO_OUT);
gpio_init(PINO_LED_VERDE);
gpio_set_dir(PINO_LED_VERDE, GPIO_OUT);
gpio_init(PINO_LED_AZUL);
gpio_set_dir(PINO_LED_AZUL, GPIO_OUT);
gpio_init(PINO_BUZZER);
gpio_set_dir(PINO_BUZZER, GPIO_OUT);
printf("Dispositivo inicializado.\n");
}
// Função principal
int main() {
configurar();
while (true) {
analisar_pacotes_rede();
sleep_ms(5000);
}
return 0;
}