Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

Exercice 6 : Capture et Filtrage de Paquets (Socket Raw)

Ce projet simule la création, l'analyse et le filtrage de paquets TCP/IP avec vérification de l'intégrité par checksum.

Structure du projet

  • PacketCapture.java : Programme qui crée, analyse et filtre des paquets TCP/IP

Fonctionnalités

1. Création de 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

2. Analyse de Paquets

  • 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.

3. Vérification d'Intégrité

  • 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

Structures de Données

En-tête IP (20 octets)

- 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)

En-tête TCP (20 octets minimum)

- 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)

Algorithme de Checksum

Le programme utilise l'algorithme de checksum Internet standard (RFC 1071) :

  1. Diviser les données en mots de 16 bits
  2. Additionner tous les mots
  3. Ajouter les retenues (carry)
  4. Prendre le complément à un

Compilation

cd exo6
javac PacketCapture.java

Exécution

java PacketCapture

Exemple d'utilisation

=== 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

Concepts Implémentés

  1. Socket Raw (Simulé) : Création manuelle de paquets TCP/IP
  2. Checksum : Vérification de l'intégrité des données
  3. Filtrage : Détection et filtrage des paquets corrompus
  4. Parsing : Analyse des en-têtes IP et TCP
  5. Protocole TCP/IP : Respect de la structure des en-têtes

Notes Importantes

  • 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

Limitations

  • 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 aller plus loin

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