Retour aux mises à jour
New releaseJul 21, 2026

httpgrep v4.6

Scanner HTTP(S) asynchrone qui inspecte les corps de réponse et les en-têtes à la recherche de chaînes ou d'expressions régulières sur des hôtes, ports, plages CIDR et vhosts basés sur les certificats TLS.

Partager

Description

Un outil Python asynchrone et rapide qui scanne des serveurs HTTP(S) et recherche des chaînes de caractères ou des motifs regex dans les corps et les en-têtes des réponses HTTP.

Il accepte des hôtes uniques, des URLs, des plages CIDR, des plages d'adresses IP ou des fichiers ; scanne plusieurs ports par cible (un seul, listes séparées par des virgules ou plages, détection automatique TLS vs simple par port) ; peut extraire et scanner les (v)hôtes basés sur le nom directement depuis les certificats TLS ; diffuse les correspondances en direct sur le terminal ; et peut écrire les résultats dans des fichiers journaux texte, CSV ou JSONL.

Il est conçu pour les grands scans : un cœur asynchrone pilote des milliers de connexions concurrentes, une vérification TCP préalable ignore les ports morts à moindre coût, des délais d'attente par hôte et globaux évitent qu'il ne reste bloqué sur des cibles lentes/mortes, et une exécution interrompue peut être reprise.

Configuration requise

  • Python 3.11+ sur un système POSIX (Linux, *BSD, macOS - utilise termios et la gestion des signaux Unix d'asyncio)
  • httpx - pip install -r requirements.txt (ou pip install httpx)
  • facultatif, utilisé automatiquement s'il est présent : uvloop (boucle d'événements plus rapide), aiodns (dns non bloquant pour -r), h2 (HTTP/2 pour -2), httpx[socks] / socksio (proxies SOCKS)

httpgrep est un script unique autonome - exécutez simplement ./httpgrep.py.

Utilisation

$ httpgrep -H
    __    __  __
   / /_  / /_/ /_____  ____ _________  ____
  / __ \/ __/ __/ __ \/ __ `/ ___/ _ \/ __ \
 / / / / /_/ /_/ /_/ / /_/ / /  /  __/ /_/ /
/_/ /_/\__/\__/ .___/\__, /_/   \___/ .___/
             /_/    /____/         /_/

     --== [ by nullsecurity.net ] ==--

usage

  httpgrep -h <arg> -s <arg> [opts] | <misc>

target options

  -h <hosts|file>   - hôte unique/url ou plage hôte-/cidr ou fichier contenant
                      des hôtes ou fichier contenant des URLs, ex. : foobar.net,
                      192.168.0.1-192.168.0.254, 192.168.0.0/24, /tmp/hosts.txt
                      une liste d'hôtes séparée par des virgules fonctionne
                      aussi, ex. : 1.2.3.4,foo.net,10.0.0.0/24
                      NOTE : les hôtes peuvent aussi contenir ':<ports>' en ligne
                      de commande ou dans le fichier, où <ports> est un port
                      unique, une liste séparée par des virgules ou une plage,
                      ex. : foo.net:8080, foo.net:80,443, 10.0.0.1:1-1024
  -p <ports|file>   - port(s) auxquels se connecter : port unique, liste séparée
                      par des virgules, plage, ou fichier avec une spécification
                      par ligne, ex. : 80, 80,443,8080, 8000-8100,
                      /tmp/ports.txt (défaut : 80, ou 443 quand -t est donné)
  -t                - force TLS/SSL sur tous les ports. par défaut le schéma est
                      auto-détecté par port (http simple, bascule vers TLS si le
                      port le parle)
  -u <URI|file>     - URI ou URIs séparées par des virgules ou fichier avec URIs
                      (une par ligne) dans lesquelles rechercher les chaînes
                      données, ex. : /foobar/, /foo.html, /admin,/login,
                      /tmp/paths.txt (défaut : /)
  -r                - affiche le nom reverse-dns (PTR) des IPv4 scannées comme
                      étiquette ; l'ip reste la cible du scan (pas de dérive de
                      périmètre). non bloquant avec le paquet aiodns

http options

  -X <method>       - méthode de requête HTTP à utiliser, n'importe quelle casse
                      (défaut : get). utilisez '?' pour lister les méthodes
                      disponibles.
  -a <user:pass>    - identifiants d'authentification http (format : 'user:pass')
  -U <UA>           - définit un User-Agent personnalisé (défaut : dernier
                      ms edge, windows)
  -A                - utilise un user-agent aléatoire par requête
  -R <headers>      - définit des en-têtes personnalisés (format :
                      'foo=bar;lol=lulz;...')
  -C <cookies>      - définit des cookies (format : 'foo=bar;lol=lulz;...')
  -F                - ne suit pas les redirections HTTP
  -L <num>          - nombre maximal de redirections à suivre (défaut : 10 ;
                      ignoré avec -F)
  -E                - vérifie les certificats TLS/SSL (défaut : aucune
                      vérification)
  -P <proxy>        - utilise un proxy (format :
                      '[http|https|socks4|socks5]://host:port')
                      (socks nécessite le paquet 'httpx[socks]' / socksio)
  -f <codes>        - ne rapporte que les réponses avec les codes de statut HTTP
                      donnés, ex. : '200', '200,301,302'
  -e <codes>        - exclut les réponses avec les codes de statut HTTP donnés,
                      ex. : '404', '403,404,500'
  -2                - essaie HTTP/2 (négocié par ALPN sur TLS, repli sur 1.1 ;
                      http simple reste en 1.1). nécessite le paquet 'h2'

search options

  -s <str|file>     - une chaîne/expression régulière unique ou plusieurs
                      chaînes/expressions régulières dans un fichier à trouver
                      dans les corps et en-têtes des réponses HTTP (voir -w),
                      ex. : 'tomcat 8', '/tmp/igot0daysforthese.txt'
  -S <str|file>     - inverse (grep -v) : supprime TOUTES les correspondances
                      d'une réponse si cette chaîne/expression régulière (ou
                      fichier) apparaît n'importe où dans son corps ou ses
                      en-têtes, ex. pour filtrer les pages d'erreur / 404
                      dynamiques
  -w <where>        - où rechercher : headers, body, ou headers,body
                      (défaut : headers,body)
  -b <bytes>        - nombre d'octets de contexte à afficher depuis une
                      correspondance dans le body (défaut : 64)
  -m <size>         - body maximal à lire + rechercher ; suffixe b/kb/mb, pas de
                      suffixe = kb, ex. : 512, 1mb, 262144b (défaut : 256kb)
  -i                - utilise une recherche insensible à la casse
  -I                - utilise une inversion insensible à la casse (pour -S)

scan options

Catégories