
Packet-Sniffer v4.0.0
Uno strumento per lo sniffing di pacchetti di rete sviluppato in Python 3.
Packet Sniffer
Un monitor del traffico di rete per GNU/Linux. I frame vengono catturati da un'interfaccia di rete tramite un raw socket, decodificati livello per livello con la libreria NETProtocols e visualizzati a schermo man mano che arrivano:
[>] Frame #4 at 15:42:07 (wlan0, 74 bytes)
[+] Ethernet 3c:7c:3f:1a:be:22 -> 9c:1e:95:aa:01:5f
EtherType: IPv4
[+] IPv4 192.168.1.96 -> 142.250.79.78
TTL: 64 | Flags: Don't fragment (DF) | Total Length: 60 | ID: 39754
Protocol: TCP | Checksum: 0x2b51
[+] TCP 51888 -> 443
Flags: 0x002 (SYN) | Seq: 3598801521 | Ack: 0
Window: 64240 | Checksum: 0x2008 | Options: 20 bytes
La decodifica tiene conto delle opzioni (l'IHL di IPv4 e il data offset di TCP vengono rispettati), i frame malformati o troncati vengono diagnosticati invece di far crashare la cattura, e i protocolli sconosciuti terminano la catena di decodifica in modo pulito: la cattura sopravvive a qualunque cosa la rete trasmetta.
Installazione
pipx install "git+https://github.com/EONRaider/Packet-Sniffer.git"
(Oppure uv tool install con lo stesso URL. L'applicazione non è pubblicata su PyPI con questo nome: quel debutto è riservato al suo prossimo cambio di nome.)
Oppure eseguilo da un clone con uv:
git clone https://github.com/EONRaider/Packet-Sniffer.git
cd Packet-Sniffer
uv sync
Utilizzo
packet-sniffer [-h] [-i INTERFACE] [-d] [--version]
options:
-i, --interface interface to capture frames from (default: all interfaces)
-d, --data also display each frame's raw payload
La cattura richiede un raw socket, che su Linux significa essere root:
sudo packet-sniffer -i eth0
...oppure concedere all'interprete la capacità CAP_NET_RAW. Da un clone, eseguilo come sudo .venv/bin/python -m packet_sniffer.
Come funziona
capture.py genera frame raw da un socket AF_PACKET; decoder.py percorre la catena di protocolli di ogni frame (Ethernet → ARP / IPv4 / IPv6 → ICMP / TCP / UDP) fino a un DecodedFrame immutabile; i renderer in output.py eseguono il dispatch in base ai tipi di layer decodificati. La panoramica completa — incluso il motivo per cui l'utilizzo di memoria rimane costante durante catture lunghe e come aggiungere un renderer — si trova in ARCHITECTURE.md.
Tutto tranne il raw socket funziona su qualsiasi sistema operativo, quindi la suite di test (decodifica e rendering su frame registrati) non richiede né root né Linux:
uv run pytest
Roadmap
- Filtri BPF (filtri di cattura lato kernel)
- Output di file pcap/pcapng e input di replay da pcap
- Output JSON/NDJSON da passare in pipe ad altri strumenti
- Timestamp del kernel (
SO_TIMESTAMPNS) - Un nuovo nome: restate sintonizzati
Disclaimer legale
L'uso del codice contenuto in questo repository, in parte o nella sua interezza, per colpire obiettivi senza previo consenso reciproco è illegale. È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili.
Gli sviluppatori non si assumono alcuna responsabilità e non rispondono di usi impropri o danni causati da qualsiasi codice contenuto in questo repository, nell'eventualità che, accidentalmente o meno, venga utilizzato da un agente di minaccia o da un'entità non autorizzata come mezzo per compromettere la sicurezza, la privacy, la riservatezza, l'integrità e/o la disponibilità di sistemi e delle risorse a essi associati. In questo contesto, il termine "compromissione" è d'ora in poi inteso come lo sfruttamento di vulnerabilità note o sconosciute presenti in detti sistemi, inclusa, ma non limitata a, l'implementazione di controlli di sicurezza, abilitati da esseri umani o elettronicamente.
L'uso di questo codice è solo approvato dagli sviluppatori in circostanze direttamente correlate ad ambienti educativi o incarichi autorizzati di penetration testing il cui scopo dichiarato è trovare e mitigare le vulnerabilità nei sistemi, limitando la loro esposizione a compromissioni ed exploit impiegati da agenti malintenzionati come definito nei rispettivi modelli di minaccia.