Ce projet simule la création, l'analyse et le filtrage de paquets TCP/IP avec vérification de l'intégrité par checksum.
PacketCapture.java: Programme qui crée, analyse et filtre des paquets TCP/IP
- Construit un en-tête IP complet (20 octets)
- Construit un en-tête TCP complet (20 octets)
- Calcule automatiquement les checksums IP et TCP
- Parse les en-têtes IP et TCP
- Extrait toutes les informations :
- Adresses IP source et destination
- Ports source et destination
- Numéros de séquence et d'acquittement
- Flags TCP, TTL, etc.
- Calcule le checksum (somme de contrôle)
- Vérifie l'intégrité des paquets IP et TCP
- Détecte les paquets corrompus
- Filtre les paquets avec erreurs
- Version et IHL (1 octet)
- Type of Service (1 octet)
- Longueur totale (2 octets)
- Identification (2 octets)
- Flags et Fragment Offset (2 octets)
- TTL (1 octet)
- Protocole (1 octet) - TCP = 6
- Checksum (2 octets)
- IP Source (4 octets)
- IP Destination (4 octets)
- Port Source (2 octets)
- Port Destination (2 octets)
- Numéro de Séquence (4 octets)
- Numéro d'Acquittement (4 octets)
- Data Offset et Flags (2 octets)
- Taille de Fenêtre (2 octets)
- Checksum (2 octets)
- Pointeur Urgent (2 octets)
Le programme utilise l'algorithme de checksum Internet standard (RFC 1071) :
- Diviser les données en mots de 16 bits
- Additionner tous les mots
- Ajouter les retenues (carry)
- Prendre le complément à un
cd exo6
javac PacketCapture.javajava PacketCapture=== Exercice 6 : Capture et Filtrage de Paquets (Socket Raw) ===
Ce programme simule la création et l'analyse de paquets TCP/IP
avec vérification de l'intégrité par checksum.
Entrez l'adresse IP source (ex: 192.168.1.10): 192.168.1.100
Entrez le port source (ex: 8080): 8080
Entrez l'adresse IP destination (ex: 192.168.1.20): 192.168.1.200
Entrez le port destination (ex: 80): 80
--- Création du paquet TCP/IP ---
Paquet créé avec succès (40 octets)
--- Contenu du paquet (Hexadécimal) ---
45 00 00 28 12 34 40 00 40 06 B8 61 C0 A8 01 64
C0 A8 01 C8 1F 90 00 50 12 34 56 78 00 00 00 00
50 02 20 00 E3 88 00 00
--- Analyse du paquet ---
IP Header:
Version: 4
Protocol: 6 (TCP)
TTL: 64
Checksum: 0xB861
Source IP: 192.168.1.100
Destination IP: 192.168.1.200
Total Length: 40 bytes
IP Checksum Valid: true
TCP Header:
Source Port: 8080
Destination Port: 80
Sequence Number: 305419896
Ack Number: 0
Flags: 0x02
Window Size: 8192
Checksum: 0xE388
TCP Checksum Valid: true
--- Filtrage des paquets ---
Le paquet a été vérifié et ne contient pas d'erreurs.
Tous les checksums sont valides.
--- Test avec un paquet corrompu ---
Analyse du paquet corrompu :
IP Header:
Version: 4
Protocol: 6 (TCP)
TTL: 64
Checksum: 0xB861
Source IP: 192.168.1.255
Destination IP: 192.168.1.200
Total Length: 40 bytes
IP Checksum Valid: false
TCP Header:
Source Port: 8080
Destination Port: 80
Sequence Number: 305419896
Ack Number: 0
Flags: 0x02
Window Size: 8192
Checksum: 0xE388
TCP Checksum Valid: true
- Socket Raw (Simulé) : Création manuelle de paquets TCP/IP
- Checksum : Vérification de l'intégrité des données
- Filtrage : Détection et filtrage des paquets corrompus
- Parsing : Analyse des en-têtes IP et TCP
- Protocole TCP/IP : Respect de la structure des en-têtes
- Java ne permet pas l'accès direct aux sockets raw pour des raisons de sécurité
- Ce programme simule le comportement d'un socket raw
- Les paquets sont créés en mémoire, pas envoyés sur le réseau
- Pour une vraie capture de paquets, utilisez des outils comme Wireshark ou des bibliothèques natives
- Le checksum est calculé selon le standard RFC 1071
- Les paquets corrompus sont détectés par vérification du checksum
- Simulation uniquement (pas d'envoi réel sur le réseau)
- En-têtes minimaux (pas d'options IP ou TCP)
- Pas de données utiles (payload) dans les paquets
- Nécessiterait des privilèges root/admin pour un vrai socket raw
Pour capturer de vrais paquets réseau en Java, vous pouvez utiliser :
- Pcap4J : Bibliothèque Java pour la capture de paquets
- JNetPcap : Wrapper Java pour libpcap
- Scapy (Python) : Outil plus puissant pour la manipulation de paquets