Maxime BENE
Retour aux projets
Projet actifPython 3.12+Scapy

Network Packet Analyzer

Un mini-IDS en Python qui capture, analyse et détecte les comportements suspects sur un réseau — pensé pour un analyste SOC Niveau 1.

Contexte du projet

Dans un SOC N1, l'analyste doit savoir lire un flux réseau, détecter les attaques classiques et prioriser les alertes. Wireshark est l'outil de référence, mais il reste manuel.

J'ai voulu construire l'équivalent automatisé : un script Python qui prend un fichier .pcap ou capture en live, détecte les menaces connues et sort un rapport exploitable. Le but n'est pas de remplacer un SIEM, mais de comprendre ce qui se passe sous le capot.

Fonctionnalités clés

Détection de scan de ports

Identifie les scans Nmap (SYN, Connect) en comptant les ports distincts sollicités par IP source. Sévérité graduée : MOYEN / ÉLEVÉ / CRITIQUE.

Détection de brute-force

Détecte les tentatives répétées de SYN sur des ports sensibles (SSH, RDP, MySQL…). Whitelist intégrée pour ignorer le DNS, HTTP et NTP.

Distinction interne / externe

Utilise ipaddress pour identifier les IPs RFC1918. Une alerte provenant d'une IP publique est marquée comme externe et priorisée.

Export JSON structuré

Chaque rapport est exporté dans un format JSON compatible avec Wazuh, Elasticsearch ou tout SIEM. Prêt pour l'automatisation.

Deux modes d'analyse

Lecture de fichiers .pcap/.pcapng (analyse offline) ou capture live sur une interface réseau (nécessite libpcap).

Architecture modulaire

Code séparé en sniffer, detector et utils. Chaque détection est indépendante et peut être étendue (ARP spoofing, ICMP flood…) sans toucher au reste.

Stack technique

Python 3.12Langage principal
ScapyCapture & dissection
ColoramaInterface terminal
Git / GitHubVersioning

Exemple de rapport

Sortie réelle sur un fichier capturé dans mon lab (Kali → Ubuntu avec scan Nmap) :

terminal — python main.py --file captures/test.pcapng
📂 Lecture du fichier captures/test.pcapng...

🔍 Exécution des analyses de sécurité...
🚨 CRITIQUE - SCAN DE PORTS (interne) depuis 192.168.149.129 - 1000 ports distincts

============================================================
📊 RAPPORT D'ANALYSE RÉSEAU
============================================================

⏱️  Durée: 0.09 secondes
📦 Paquets capturés: 2140

📈 Répartition des protocoles:
  TCP: 2058 (96.2%) ███████████████████
  UDP: 68 (3.2%)
  Other: 14 (0.7%)

🌐 Top 5 IPs les plus actives:
  192.168.149.130 → 1107 paquets
  192.168.149.129 → 1003 paquets
  192.168.149.1 → 15 paquets

🔌 Top 5 ports les plus sollicités:
  Port 53 (DNS) → 59 connexions
  Port 8888 (Unknown) → 1 connexions
  Port 110 (POP3) → 1 connexions

⚠️  ÉVÉNEMENTS SUSPECTS DÉTECTÉS:
  • 🚨 CRITIQUE - SCAN DE PORTS (interne) depuis 192.168.149.129 - 1000 ports distincts

============================================================
✅ Exporté vers capture_report.json

Types d'alertes détectées

Scan de portsCRITIQUE

🚨 CRITIQUE — SCAN DE PORTS (interne) depuis 192.168.149.129 — 1000 ports distincts

Brute-forceMOYEN

🔒 BRUTE-FORCE potentiel (interne) : 192.168.1.100 → port 22 (SSH) — 45 tentatives SYN

Trafic normalAUCUNE

✅ Aucun événement suspect détecté

Ce que ce projet démontre

  • Maîtrise des protocoles réseau — TCP, UDP, ICMP, flags SYN/ACK, ports, adressage RFC1918.
  • Compréhension des attaques — scan de ports, brute-force, floods, et comment les détecter.
  • Capacité à coder des outils — Python, Scapy, architecture modulaire, gestion d'erreurs.
  • Démarche SOC — priorisation des alertes (sévérité, interne/externe), export exploitable par un SIEM.
  • Méthodologie lab — tests en environnement virtualisé (Kali → Ubuntu), génération de captures réelles.

Prochaines étapes

  • • Détection d'ARP spoofing et d'ICMP flood
  • • Export vers format Wazuh / Elasticsearch
  • • Dashboard web (Flask + Chart.js)
  • • Tests unitaires avec pytest
  • • Fichier de configuration YAML pour les seuils

Envie de voir le code ?

Le projet est open-source sur GitHub, avec README détaillé et exemples.

Voir sur GitHub