tcpcat.
Projet communautaire open source
N. — NycolazSec
Note technique : 1337
github.com/NycolazSec/tcpcat
Références : Nmap, RFC 793, eBPF/AF_XDP
Septembre 2026
Catégorie : informationnel — évaluation réseau autorisée
Document communautaire — non commercial

tcpcat — reconnaissance réseau hautes performances et test de visibilité IDS/IPS

Note technique communautaire — v1.0

CI: Go test -race Go 1.22 Apache-2.0 Linux · macOS · Windows Projet communautaire
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀   ⠀⠀⢤⣶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡾⠿⢿⡀⠀⠀⠀⠀⣠⣶⣿⣷
⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣦⣴⣿⡋⠀⠀⠈⢳⡄⢠⣾⣿⠁⠈⣿⡆      tcpcat v1.0 by NycolazSec
⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⠿⠛⠉⠉⠁⠀⠀⠀⠹⡄⣿⣿⣿⠀⠀⢹⇇      Modular Security & Network Engine
⠀⠀⠀⠀⠀⣠⣾⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⣰⣏⢻⣿⣿⡆⠀⠸⣿
⠀⠀⠀⢀⣴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣆⠹⣿⣷⠀⢘⣿
⠀⠀⢀⡾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⠋⠉⠛⠂⠹⠿⣲⣿⣿⣧⢠⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣿⣿⣿⣷⣾⣿⡇⢀⠀⣼⣿⣿⣿⣧
⠰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⡘⢿⣿⣿⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣷⡈⠿⢿⣿⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠁⢙⠛⣿⣿⣿⣿⡟⠀⡿⠀⠀⢀⣿⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣶⣤⣉⣛⠻⠇⢠⣿⣾⣿⡄⢻⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⦦⣤⣾⣿⣿⣿⣿⣆
Colophon

Statut de ce mémo

Ce document présente tcpcat, un moteur de reconnaissance réseau écrit en Go. Cette note communautaire n'est pas une RFC IETF et ne remplace pas Nmap ; elle décrit une approche complémentaire orientée performances, rapports et évaluation autorisée. Le projet est distribué sous licence Apache-2.0.

Résumé

tcpcat combine un moteur de scan multi-protocoles avec une accélération eBPF/AF_XDP sur Linux. Ses contrôles de variation de paquets et de timing aident les équipes autorisées à évaluer la visibilité de leurs IDS/IPS. Un moteur de détection sandboxé en WebAssembly assure la corrélation avec des bases CVE.

Démarrage rapide

Local

Découvrir la CLI

go run ./cmd/tcpcat --help

Exporter un rapport

go run ./cmd/tcpcat -sV \
        -j report.json 127.0.0.1

Compiler depuis les sources

go build -o tcpcat \
  ./cmd/tcpcat

1. Introduction et spécifications

§1

tcpcat expose l'intégralité de la pile TCP/IP au niveau du pilote réseau. Plutôt que de passer par les sockets BSD, chaque paquet est construit, envoyé et lu directement en espace noyau. Le tableau ci-dessous résume les valeurs mesurées en environnement de test.

Débit vs. outils classiques
23,8×
Contrôles de variation (phase 4)
29 techniques
Débit crête / cœur
≈ 1 000 000 pps
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port         |       Destination Port       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |
|       |           |G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum           |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1 — En-tête TCP (RFC 793 §3.1). Champs configurables lors d'une évaluation tcpcat :
Flags (SYN/ACK/FIN/Xmas) Window Options / Padding Sequence Number (jitter)

2. Capacités système

§2

2.1 Reconnaissance L2–L7

Énumération multi-protocoles (TCP, UDP, ICMP), cartographie de topologie L3/L4 avec empreinte logicielle, et découverte asynchrone DNS / mDNS / NetBIOS.

SYN · ACK · Window · Xmas · FIN scans

2.2 Noyau Linux eBPF / AF_XDP

Accès direct aux paquets au niveau du pilote réseau — contournement complet de la couche socket. Débit filaire sans surcharge CPU notable.

≈1M pps/cœur · Zero-Copy Driver Mode

2.3 Intelligence programmable (WASM)

Moteur de détection sandboxé en WebAssembly. Les dissecteurs de protocoles peuvent être écrits en Rust, C, Go ou AssemblyScript.

Corrélation CVE dynamique · Vulners API · Google OSV

3. Test de visibilité IDS/IPS

§3

Des contrôles de variation répartis sur la pile OSI, sélectionnables via --evasion, pour valider la journalisation et les alertes de défenses autorisées.

Profil Variation Usage Surcharge Usage recommandé
offTrafic de référenceInventaire autorisé0 %Cartographie rapide
lightVariation limitéeAudit de production+5 %Impact réduit
moderateVariation standardValidation contrôlée+15 %Environnements surveillés
aggressiveVariation étenduePlan de test approuvé+30 %Laboratoire ou environnement contrôlé
stealthyVariation élevéeScénario de visibilité+50 %Validation encadrée
Couche réseau (L3)
Fragmentation IPv4 et mutation adaptative de la stratégie TTL.
Couche transport (L4)
Ajustement de fenêtre TCP, ports éphémères randomisés, crafting de flags.
Couche session (L5)
Jitter temporel à coefficient de variance réglable (0.0–1.0).
Couche application (L7)
Orchestration distribuée de leurres (decoy swarm) en sockets brutes.

4. Chaîne d'évaluation

Flux

Les cibles, services et résultats traversent les contrôles suivants avant de produire des rapports exploitables.

Target input
    |
  Scope validation (--scope-file)
    |
  Host discovery and scan engine
    |
  Service and version detection (-sV)
    |
  Offline/API CVE correlation
    |
  JSON / SARIF / JSONL / baseline comparison

5. Benchmark comparatif

§5

Énumération des ports 1–1024, même charge réseau et même infrastructure cible.

tcpcat (eBPF natif)80 ms — 23,8× plus rapide
Nmap (SYN scan standard)1 900–2 300 ms

Résultats de laboratoire indicatifs. Consultez le dépôt pour la méthode, le matériel et les limites de reproductibilité.

Audit autorisé

Guide

Le profil safe-production fournit un point de départ prudent pour un périmètre explicitement approuvé. Les rapports JSON, SARIF et JSONL facilitent le suivi et l'intégration aux outils de sécurité.

sudo tcpcat \
  --profile safe-production \
  --scope-file scope.txt \
  -Pn -sT -sV -p 443 \
  -j report.json --sarif report.sarif --audit-log audit.jsonl \
  10.42.10.15

Rapports et suivi

Sorties
FormatUtilisation
-j report.jsonRésultats détaillés, services et évaluation CVE.
--sarif report.sarifRésultats pour CI/CD et outils compatibles SARIF.
--audit-log audit.jsonlHistorique append-only d'exécutions autorisées.
--baseline previous.json --changes delta.jsonNouveaux ports, changements de service et nouvelles CVE.

Exemples de résultats

Rapports

JSON

{
  "service": "apache",
  "version": "2.4.49",
  "risk_severity": "high"
}

SARIF

{
  "ruleId": "CVE-2021-41773",
  "level": "error"
}

Évolution

{
  "new_open_ports": [
    {"port": 443}
  ]
}

Support plateforme

Compatibilité
OSSupport
Linux 5.8+Scans socket; eBPF/AF_XDP expérimental sur matériel compatible.
macOSScans TCP Connect; pas d'AF_XDP.
WindowsScans basés sur sockets selon les privilèges disponibles.

Références

Écosystème

Nmap · RFC 793 · eBPF · AF_XDP · OSV · SARIF

6. Référence en ligne de commande

§6
Figure 2 — Cartographie rapide (1000 ports les plus fréquents)
sudo tcpcat -sS --top-ports 1000 --rate 100000 target.lan
Figure 3 — Validation de la visibilité firewall/DPI avec un plan de test approuvé
sudo tcpcat -Pn -sT -p 1-10000 --evasion aggressive --jitter 0.8 --frag --decoy 8.8.8.8,1.1.1.1 target.lan
Figure 4 — Mode eBPF ultra-rapide sur sous-réseau complet
sudo tcpcat --ebpf -p 1-1000 10.0.0.0/16 -w 128 -T 5
Figure 5 — Énumération de versions applicatives, rapport JSON
sudo tcpcat -sV -p 22,80,443,3306,5432,27017 192.168.0.0/24 -j report.json

Limites connues

Important

Contribuer

Open source

Les contributions sont bienvenues pour les détecteurs de services, signatures CVE hors ligne, tests, documentation et compatibilité plateforme. Exécutez la suite avant une pull request.

go test ./...
go build ./cmd/tcpcat

Annexe A. Folklore réseau (informatif, non normatif)

Ann. A

« Il n'y a pas d'endroit comme le 127.0.0.1. » — dans la tradition des RFC humoristiques (cf. RFC 2549, RFC 1149).

A.1 — RFC 768, le dilemme du datagramme

« Je te raconterais bien une blague sur l'UDP... mais je ne suis pas certain que tu la reçoives, et honnêtement je me fiche de savoir si tu l'as comprise. »

A.2 — RFC 793, le barman TCP

Un paquet entre dans un bar : SYN — « Je voudrais une bière. » SYN-ACK — « Tu veux une bière ? » ACK — « Oui, une bière. » Le barman répond RST (port 80 fermé).

A.3 — Extension du modèle OSI

Layer 8 exception : erreur critique identifiée entre la chaise et le clavier. « Avez-vous essayé d'éteindre et de rallumer la table de routage BGP ? »

A.4 — Wireshark à 3h du matin

Filtre !(arp or dns or mdns or ssdp) → 0 paquet. « Qui diffuse du SSDP sur le VLAN de prod à 3h du matin ?! »

A.5 — ICMP Echo Request

64 bytes, icmp_seq=1, ttl=116 — la seule relation stable et sans engagement dans ta vie.

A.6 — MTU 1500 vs bit DF

ICMP type 3, code 4 : « Fragmentation Needed and DF bit set. » Le trou noir des paquets orphelins — tcpcat --frag le contourne nativement.

7. Considérations de sécurité

§7
Usage
autorisé
uniquement

tcpcat est strictement réservé aux audits de sécurité défensifs, tests d'intrusion autorisés et à l'administration d'infrastructures sous mandat explicite. Tout accès ou maintien non autorisé dans un système de traitement automatisé de données est passible de sanctions pénales (art. 323-1 et suivants du Code pénal, CFAA, RGPD). Les auteurs déclinent toute responsabilité en cas d'utilisation illicite.

Le projet est non commercial et ne fournit aucun service de scan hébergé. Les utilisateurs doivent respecter les sanctions, contrôles à l'export et lois applicables. Ce document n'est pas un avis juridique ni une certification de conformité. Voir NOTICE.md.