Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

MayColdHeart/NetBoard

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌐 NetBoard

Sistema de monitoramento de tráfego em servidores HTTP e FTP, onde é realizado a captura de pacotes a partir da interface de rede da máquina local.
O objetivo do projeto é analisar o tráfego de rede em uma subnet, então é preciso de no mínimo dois dispositivos para verificar o funcionamento.

✨ Funcionalidades

  • Aplicação python:
    • Captação e processamento de pacotes.
    • Comunicação com API para persitir dados.
  • API ASP.NET:
    • Processamento e persistência do tráfego em banco de dados.
    • Comunicação em tempo real para servir dashboard.
  • Dashboard:
    • Visualização do tráfego em tempo real com gráficos de pizza e tempo.
    • Tabela de tráfego com IP de client e tamanhos totais de download/upload.
    • Drill-down por client, com quebra de tráfego por protocolo (FTP, FTP-DATA e HTTP).

Mídia

Dashboard Dashboard
Arquitetura Arquitetura
API ASP.NET API ASP.NET SignalR Hub
Banco de Dados Banco de Dados
Servidor HTTP (FastAPI) HPTT FastAPI
Servidor FTP (pyftpdlib) FTP SERVER

🛠 Instalação

Pré-requisitos

Etapas

  1. Clone o repositório

    git clone https://github.com/MayColdHeart/NetBoard.git
    cd NetBoard
  2. Configure variáveis de ambiente

    cp .example.env .env
    

    Caso precise, edite a senha do usuário postgres no banco de dados, dentro do arquivo .env.

  3. Execute servidores (HTTP e FTP) e API com docker

    docker compose up

    Aguarde todos os containers executarem.

  4. Execute o sniffer de pacotes
    Em um novo terminal, a partir da pasta raíz do reposítório.

    cd sinfra
    python -m venv venv

    Ative o ambiente virtual:

    • Linux bash
      source .env/bin/activate
    • Windows cmd
      .env\Scripts\activate.bat

    Instale os requerimentos:

    pip install -r requirements.txt

    Execute:

    python sinfra.py
  5. Execute o dashboard
    Em um novo terminal

    cd design
    npm i
    npm run dev
  6. Acesse as aplicações

    • Teste o funcionamento de cada servidor localmente, para verificar se tudo está funcionando corretamente.
    • Dashboard: http://localhost:5173/
    • API ASP.NET: http://localhost:5043/scalar/
    • Servidores monitorados
      • ⚠ O acesso aos servidores de maneira local não serão registrados no dashboard, apenas o tráfego externo de rede.
      • HTTP: http://localhost:8000/docs
      • FTP:
        • Hostname: localhost
        • Porta: 21
        • Usuário: guest
        • Senha: (vazio)
  7. Configurando firewall

  • É preciso criar regras no firewall para permitir conexão entre máquinas em rede local, sem que seja exposto o acesso a internet pública.
  • Para isso, verifique o IP da sua máquina na rede local e a máscara de rede para saber o range de IPs que serão permitidos o acesso.
  • 🔎 Verifique o IP e a máscara de rede
    • Linux (bash)
      ifconfig
    • Windows (PowerShell ou cmd)
      ipconfig
    • No caso do linux, use alguma calculadora de sub-rede para traduzir para notação CIDR:
      • Exemplo: IP 192.168.1.5 com máscara 255.255.255.0 → sub-rede 192.168.1.0/24
      • Exemplo: IP 172.30.56.27 com máscara 255.255.240.0 → sub-rede 172.30.48.0/20
    • Anote o IP da sua máquina (ex: 192.168.1.5), que será o servidor, e da sub-rede (ex: 192.168.1.0/24)
  • Criando regras de firewall
    • A seguir, serão abertas portas apenas para a rede local

    • Substitua 192.168.0.0/24 pela faixa da sua rede local

    • Linux (bash - usando UFW)

      # Caso inativo, ative o UFW
      ufw enable
      
      # FTP (porta 21 + faixa 60000–60010)
      sudo ufw allow from 192.168.0.0/24 to any port 21 proto tcp
      sudo ufw allow from 192.168.0.0/24 to any port 60000:60010 proto tcp
      
      # HTTP (porta 8000)
      sudo ufw allow from 192.168.0.0/24 to any port 8000 proto tcp
      
      # Verificar regras
      sudo ufw status numbered
    • Windows (PowerShell - usando Windows Defender Firewall)

      # FTP: porta 21 + range 60000–60010
      New-NetFirewallRule -DisplayName "FTP Local Server (Local Subnet)" `
        -Direction Inbound -Protocol TCP `
        -LocalPort 21,60000-60010 `
        -RemoteAddress LocalSubnet -Action Allow
      
      # HTTP: porta 8000
      New-NetFirewallRule -DisplayName "HTTP Local Server (Local Subnet)" `
        -Direction Inbound -Protocol TCP -LocalPort 8000 `
        -RemoteAddress LocalSubnet -Action Allow
      
      # Verificar regras
      Get-NetFirewallPortFilter |
          Where-Object { $_.LocalPort -match '^(21|60000-60010|8000)$' } |
          Get-NetFirewallRule |
          Select-Object DisplayName, Direction, Enabled
  1. Acessando servidores em outra máquina
    Conecte outra máquina na mesma rede, que será usada como client.
    Lembre de utilizar o IP da sua máquina servidor, que foi anotado no passo 7.
    Então, substitua <ip-servidor-local> pelo seu IP.
  • HTTP:
    • Acesse com seu browser
    • http://<ip-servidor-local>:8000/docs
  • FTP:
    • Utilize algum cliente FTP com suporte a modo passivo e comando EPSV, como o ftp do bash (Linux) ou WinSCP (Windows)
      • Exemplos sem suporte: ftp dos terminais Windows não tem suporte ao modo passivo e FileZilla no linux não utiliza EPSV, mas sim PASV para estabelecer conexão, causando falha
    • Hostname: <ip-servidor-local>
    • Porta: 21
    • Usuário: guest
    • Senha: (vazio)
  1. Visualize o tráfego de rede
  • Acesse os endpoints do servidor HTTP com seu client e/ou movimente arquivos entre do client para o servidor com FTP.
  • Na sua máquina servidor, acesse o dashboard: http://localhost:5173/.
  • Visualize o tráfego.
  1. Removendo regras do firewall (opcional)
  • Use caso não esteja mais utilizando o projeto. Assim removendo regras desnecessárias do firewall.
  • Linux (bash - usando UFW)
    # Remover regra pelo número da lista
    sudo ufw status numbered
    sudo ufw delete <número_da_regra>
  • Windows (PowerShell)
    # Remover regra pelo DisplayName
    Remove-NetFirewallRule -DisplayName "FTP Local Server (Local Subnet)"
    Remove-NetFirewallRule -DisplayName "HTTP Local Server (Local Subnet)"

⚙ Tecnologias

  • C#
    • ASP.NET Web API 9
    • SignalR
    • Entity Framework
  • Postgresql
  • Docker
  • Javascript
    • React
    • Chart.js
    • Signal Client
  • Python
    • Scapy
    • Fast API
    • pyftpdlib

About

Network dashboard

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.