Skip to content

mauromarzocca/NetworkScan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NetworkScan

  • Versione: 3.2

Made with Python Python Version License: MIT Build Status



icon

NetworkScan è uno script Python avanzato che effettua una scansione periodica della rete locale, identifica i dispositivi connessi (inclusi quelli IoT silenziosi), e salva le informazioni in un database MySQL e in un file CSV.

🚀 Funzionalità principali

  • Scansione di una o più reti locali specificate
  • Rilevamento di dispositivi attivi tramite:
    • Ping
    • Scansione porte comuni (80, 443, 8080)
    • ARP (anche con scapy per precisione)
  • Salvataggio dei dispositivi trovati in un database MySQL
  • Generazione automatica di un file CSV giornaliero nella cartella report/
  • Aggiornamento dinamico del database se il dispositivo cambia IP o rete
  • Supporto multi-interfaccia (eth0, wlan0, ecc.)
  • Aggiunta automatica del dispositivo locale allo scan
  • Compatibile con Raspberry Pi, server Linux, Ubuntu

Testing

NetworkScan è stato testato con Raspberry Pi 4 con Ubuntu Server.

Compatibilità Proxmox / LXC

Se si intende eseguire lo script all'interno di un container LXC su Proxmox, è necessario configurare il container come Privileged (Opzione "Unprivileged container" deselezionata in fase di creazione o modificata nel config).

Questo è dovuto al fatto che scapy e altri strumenti di rete utilizzati richiedono l'accesso ai raw socket e la capacità di manipolare le interfacce di rete, permessi che normalmente sono bloccati in un container non privilegiato.

Inoltre, assicurarsi che l'interfaccia di rete del container sia configurata correttamente e che possa "vedere" il resto della rete che si intende scansionare.

Composizione Database

La tabella 'Scan' è così composta:

  • Nome : VARCHAR(255)
  • IP : VARCHAR(15)
  • MAC_ADDRESS : VARCHAR(17) PRIMARY KEY -> In quanto univoca per ogni dispositivo
  • Last_Online : DATETIME
  • Proprietario : VARCHAR(255)
  • Rete : VARCHAR(50)
  • VPN : Boolean -> Di default è false
  • Open_Ports : TEXT -> Lista delle porte aperte separate da virgola (es. "80,443,8080")

🛠️ Requisiti

  • Python 3.7+
  • Permessi di root (necessari per scapy, arp, accesso raw socket)

Dipendenza dei Pacchetti

Occorre installare i seguenti pacchetti:

sudo apt update
sudo apt install -y \
  python3 \
  python3-pip \
  python3-venv \
  python3-mysqldb \
  net-tools \
  zip \
  unzip \
  mysql-client \
  iputils-ping \
  openssh-client

Se usi il virtualenv, puoi anche aggiungere:

pip install mysql-connector-python netifaces

📦 Dipendenze Python

Installa le dipendenze con:

pip install -r requirements.txt

Contenuto requirements

mysql-connector-python netifaces scapy

⚙️ Configurazione

All’inizio dello script puoi configurare:

RETI = {
    "Network": "192.168.1.",
}

INTERFACCE_CONSIDERATE = ["eth0", "wlan0"]
DB_CONFIG = {
    'user': 'user',
    'password': 'password',
    'host': 'localhost',
    'database': 'DB'
}

Esempio crontab

Per avviarlo ogni due ore occorre

  • Eseguire il crontab da sudo
sudo crontab -e
  • Incollare la seguente riga:
0 */2 * * * /bin/bash -c 'echo "[📅] $(date "+%Y-%m-%d %H:%M:%S") Avvio scansione" >> /path/network_scan.log && /venv/bin/python /path/networkscan.py >> /path/network_scan.log 2>&1'

Questa permette di essere eseguito ogni due ore a partire da mezzanotte.

Script

É presente uno script dove occorre modificare solo il path. Occorre renderlo eseguibile tramite il comando:

chmod +x /home/mauromarzocca/Project/Python/Scan/launch_scan.sh

Inserire nel crontab

sudo crontab -e

La seguente riga:

0 */2 * * * /home/mauromarzocca/Project/Python/Scan/launch_scan.sh

🧪 Esecuzione

Lo script deve essere eseguito come root:

sudo python3 network_scanner.py

Oppure se sei in un ambiente virtuale:

sudo /path/to/venv/bin/python network_scanner.py

📂 Output

  • 🗃️ Database: tabella scan nel database NetworkScan, con:
    • Nome, IP, MAC_ADDRESS, Last_Online, Proprietario, Rete, VPN
  • 📄 CSV: file generato in report/networkscan_.csv, sovrascritto ogni giorno.

🛡️ Sicurezza

  • Lo script usa scapy per scansioni ARP precise. Alcuni dispositivi silenziosi (es. prese smart) vengono rilevati solo così.
  • l campo VPN è booleano ed è inizialmente FALSE. Puoi aggiornarlo manualmente nel DB.

📌 Esempi utili

  • Aggiornare un nome e proprietario in MySQL:
UPDATE scan
SET Nome = 'Echo Dot Soggiorno',
    Proprietario = 'Utente'
WHERE IP = '192.168.1.X';
  • Cancellare un dispositivo
DELETE FROM scan WHERE IP = '192.168.1.X';

Attenzione

Si consiglia di non lanciare lo script più volte consecutivamente, poichè potrebbe verificarsi il seguente errore:

328081 Segmentation fault      (core dumped)

Poichè un output imprevisto da comandi di sistema (es. arp, ping) può non essere gestito bene da re.search() o da subprocess.check_output(), soprattutto se si lavora in più thread.

Changelog

  • Versione 1.0 : Build Iniziale
  • Versione 1.1 : Introdotta pulizia dei file CSV più vecchi di 90 giorni
  • Versione 1.2 : Introdotta pulizia dal DB dei dispositivi più vecchi di 90 giorni
  • Versione 1.3 : Introdotto script di Backup
  • Versione 1.4 : Introdotto script di Restore
  • Versione 1.5 : Miglioramenti Generali
  • Versione 1.6 : Ottimizzazione del Codice
  • Versione 1.7 : Migliorato il riconoscimento dei dispositivi IoT
  • Versione 1.8 : Migliorato CSV
  • Versione 1.8.1 : Migliorata Documentazione
  • Versione 1.8.2 : Creazione dell'icona
  • Versione 1.9 : Creazione di uno script per automatizzare lo scan.
  • Versione 1.9.1 : Miglioramenti Generali
  • Versione 2.0 : Revisione e Ottimizzazione del codice
  • Versione 2.1 : Ottimizzazione del codice
  • Versione 2.1.1 : Migliorato lo script di Backup
  • Versione 2.2 : Miglioramento generale del codice
  • Versione 2.2.1 : Migliorato lo script di Launch
  • Versione 3.0 : Rielaborazione della Build, ottimizzazzione del codice e miglioramento della gestione del backup e del Database.
  • Versione 3.1 : Miglioramento della gestione del backup.
  • Versione 3.2 : Miglioramento nella gestione del DB.

🧑‍💻 Autore

Mauro Marzocca

Per dubbi, problemi o suggerimenti, apri una issue o contattami!

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors