installer apache2

sudo apt update
sudo apt install apache2

dans /var/www/html/index.html

Page minimale

<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    <h1>Bonjour le monde !</h1>
</body>
</html>

Pour y accéder, il faut contourner le proxy si il y un proxy

Navigateur chromium, firefox, chrome , curl , nous allons utiliser ce dernier

curl --noproxy "127.0.0.1" 127.0.0.1

on obtient quelque chose comme cela :

bruno@elliott:~/Works/tcpdump$ curl --noproxy "127.0.0.1" 127.0.0.1
<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    <h1>Bonjour le monde !</h1>
</body>
</html>
bruno@elliott:~/Works/tcpdump$ 

Dans un autre terminal on va espionner la communication

sudo tcpdump -i lo -A port 80

on voit ainsi les trames tcp entre le client et le serveur

bruno@elliott:~/Works/tcpdump$ sudo tcpdump -i lo -A port 80
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes
12:22:50.086400 IP localhost.47884 > localhost.http: Flags [S], seq 1113395499, win 65495, options [mss 65495,sackOK,TS val 2273228112 ecr 0,nop,wscale 7], length 0
E..<.\@.@..^...........PB].+.........0.........
.~.P........
12:22:50.086424 IP localhost.http > localhost.47884: Flags [S.], seq 1637539294, ack 1113395500, win 65483, options [mss 65495,sackOK,TS val 2273228112 ecr 2273228112,nop,wscale 7], length 0
E..<..@.@.<..........P..a...B].,.....0.........
.~.P.~.P....
12:22:50.086445 IP localhost.47884 > localhost.http: Flags [.], ack 1, win 512, options [nop,nop,TS val 2273228112 ecr 2273228112], length 0
E..4.]@.@..e...........PB].,a........(.....
.~.P.~.P
12:22:50.086533 IP localhost.47884 > localhost.http: Flags [P.], seq 1:74, ack 1, win 512, options [nop,nop,TS val 2273228112 ecr 2273228112], length 73: HTTP: GET / HTTP/1.1
E..}.^@.@..............PB].,a........q.....
.~.P.~.PGET / HTTP/1.1
Host: 127.0.0.1
User-Agent: curl/7.88.1
Accept: */*


12:22:50.086556 IP localhost.http > localhost.47884: Flags [.], ack 74, win 512, options [nop,nop,TS val 2273228112 ecr 2273228112], length 0
E..4T,@.@............P..a...B].u.....(.....
.~.P.~.P
12:22:50.086832 IP localhost.http > localhost.47884: Flags [P.], seq 1:376, ack 74, win 512, options [nop,nop,TS val 2273228112 ecr 2273228112], length 375: HTTP: HTTP/1.1 200 OK
E...T-@.@............P..a...B].u...........
.~.P.~.PHTTP/1.1 200 OK
Date: Wed, 13 May 2026 10:22:50 GMT
Server: Apache/2.4.67 (Debian)
Last-Modified: Wed, 13 May 2026 09:22:58 GMT
ETag: "7c-651af8688df34"
Accept-Ranges: bytes
Content-Length: 124
Vary: Accept-Encoding
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    <h1>Bonjour le monde !</h1>
</body>
</html>

12:22:50.086846 IP localhost.47884 > localhost.http: Flags [.], ack 376, win 510, options [nop,nop,TS val 2273228112 ecr 2273228112], length 0
E..4._@.@..c...........PB].ua..V.....(.....
.~.P.~.P
12:22:50.087099 IP localhost.47884 > localhost.http: Flags [F.], seq 74, ack 376, win 512, options [nop,nop,TS val 2273228113 ecr 2273228112], length 0
E..4.`@.@..b...........PB].ua..V.....(.....
.~.Q.~.P
12:22:50.087186 IP localhost.http > localhost.47884: Flags [F.], seq 376, ack 75, win 512, options [nop,nop,TS val 2273228113 ecr 2273228113], length 0
E..4T.@.@............P..a..VB].v.....(.....
.~.Q.~.Q
12:22:50.087207 IP localhost.47884 > localhost.http: Flags [.], ack 377, win 512, options [nop,nop,TS val 2273228113 ecr 2273228113], length 0
E..4.a@.@..a...........PB].va..W.....(.....
.~.Q.~.Q
^C
10 packets captured
20 packets received by filter
0 packets dropped by kernel
bruno@elliott:~/Works/tcpdump$ 

c’est un dialogue entre le client et le serveur ( curl et apache)

🎭 SCÈNE : localhost (votre PC joue les deux rôles)

📞 CLIENT (curl)                    🖥️ SERVEUR (Apache)
   port 47884                           port 80

12:22:50.086400
   [SYN] ─────────────────────────►  
   "Hé, je veux ouvrir une connexion"

12:22:50.086424
   ◄───────────────────────── [SYN-ACK]
   "D'accord, je suis prêt à te parler"

12:22:50.086445
   [ACK] ─────────────────────────►
   "Reçu, la ligne est ouverte"

═══════════════════════════════════════════
💬 LA CONVERSATION (échange de données)
═══════════════════════════════════════════

12:22:50.086533
   [PUSH] ────────────────────────►
   "Voici ma question :"
   ┌─────────────────────────────────┐
   │ GET / HTTP/1.1                  │
   │ Host: 127.0.0.1                 │
   │ User-Agent: curl/7.88.1         │
   │ Accept: */*                     │
   └─────────────────────────────────┘

12:22:50.086556
   ◄───────────────────────── [ACK]
   "J'ai bien reçu ta question"

12:22:50.086832
   ◄───────────────────────── [PUSH]
   "Voici ma réponse :"
   ┌─────────────────────────────────┐
   │ HTTP/1.1 200 OK                 │
   │ Date: Wed, 13 May 2026 ...      │
   │ Content-Type: text/html         │
   │                                 │
   │ <!DOCTYPE html>                 │
   │ <html>...                       │
   │ <h1>Bonjour le monde !</h1>     │
   │ </html>                         │
   └─────────────────────────────────┘

12:22:50.086846
   [ACK] ─────────────────────────►
   "J'ai bien reçu ta réponse"

═══════════════════════════════════════════
👋 LA FIN DE LA CONVERSATION
═══════════════════════════════════════════

12:22:50.087099
   [FIN] ─────────────────────────►
   "Moi, je te quitte"

12:22:50.087186
   ◄───────────────────────── [FIN]
   "Moi aussi, au revoir"

12:22:50.087207
   [ACK] ─────────────────────────►
   "OK, conversation terminée"

Un paquet TCP:

Octet 0-1  : Port source      (16 bits = 2 octets)
Octet 2-3  : Port destination (16 bits = 2 octets)
Octet 4-7  : Numéro de séquence (32 bits = 4 octets)
Octet 8-11 : Numéro d'acquittement (32 bits = 4 octets)
Octet 12   : Header length + réservé (8 bits)
Octet 13   : FLAGS (8 bits) ← C'EST ICI QUE VOUS DEVEZ REGARDER !
Octet 14-15: Fenêtre (16 bits)
Octet 16-17: Checksum (16 bits)
Octet 18-19: Urgent pointer (16 bits)