
Scanner HTTP(S) asynchrone qui recherche des chaînes ou des expressions régulières dans les corps de réponse et les en-têtes, sur des hôtes, ports, plages CIDR et vhosts à certificat TLS.
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.
termios et la gestion des signaux Unix d'asyncio)pip install -r requirements.txt (ou pip install httpx)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.
$ 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