Volver a actualizaciones
Nuevo releaseJul 21, 2026

httpgrep v4.6

Escáner HTTP(S) asíncrono que busca cadenas o expresiones regulares en los cuerpos y cabeceras de las respuestas en hosts, puertos, rangos CIDR y vhosts con certificados TLS.

Compartir

Descripción

Una herramienta Python rápida y asíncrona que escanea servidores HTTP(S) y busca cadenas o patrones regex en cuerpos y cabeceras de respuestas HTTP.

Acepta hosts individuales, URLs, rangos CIDR, rangos IP o archivos; escanea múltiples puertos por objetivo (único, listas separadas por comas o rangos, auto-detectando TLS o plano por puerto); puede extraer y escanear (v)hosts basados en nombre directamente de los certificados TLS; transmite las coincidencias en vivo al terminal; y puede escribir los resultados en archivos de registro de texto, CSV o JSONL.

Está diseñado para escaneos grandes: un núcleo asíncrono impulsa miles de conexiones concurrentes, un pre-vuelo TCP descarta puertos muertos de forma económica, los tiempos de espera por host y globales evitan que se cuelgue en objetivos lentos/muertos, y una ejecución interrumpida puede reanudarse.

Requisitos

  • Python 3.11+ en un sistema POSIX (Linux, *BSD, macOS - usa termios y el manejo de señales Unix de asyncio)
  • httpx - pip install -r requirements.txt (o pip install httpx)
  • opcionales, se usan automáticamente si están presentes: uvloop (bucle de eventos más rápido), aiodns (dns no bloqueante para -r), h2 (HTTP/2 para -2), httpx[socks] / socksio (proxies SOCKS)

httpgrep es un único script autocontenido - simplemente ejecute ./httpgrep.py.

Uso

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

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

uso

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

opciones de objetivo

  -h <hosts|archivo> - host/url único o rango de hosts-/cidr o archivo que
                      contenga hosts o archivo que contenga URLs, ej.: foobar.net,
                      192.168.0.1-192.168.0.254, 192.168.0.0/24, /tmp/hosts.txt
                      también funciona una lista de hosts separada por comas, ej.:
                      1.2.3.4,foo.net,10.0.0.0/24
                      NOTA: los hosts también pueden contener ':<puertos>' en la
                      línea de comandos o en el archivo, donde <puertos> es un
                      único puerto, lista separada por comas o rango, ej.:
                      foo.net:8080, foo.net:80,443, 10.0.0.1:1-1024
  -p <puertos|archivo> - puerto(s) a los que conectarse: un único puerto, lista
                      separada por comas, rango, o un archivo con una
                      especificación por línea, ej.: 80, 80,443,8080, 8000-8100,
                      /tmp/ports.txt
                      (por defecto: 80, o 443 cuando se da -t)
  -t                - forzar TLS/SSL en todos los puertos. por defecto el esquema
                      se auto-detecta por puerto (http plano, cambiando a TLS si
                      el puerto lo habla)
  -u <URI|archivo>  - URI o URIs separadas por comas o archivo con URIs (una por
                      línea) donde buscar las cadenas dadas, ej.: /foobar/,
                      /foo.html, /admin,/login, /tmp/paths.txt (por defecto: /)
  -r                - mostrar el nombre de reverse-dns (PTR) de los IPv4
                      escaneados como etiqueta; la ip sigue siendo el objetivo
                      del escaneo (sin desvío de alcance). no bloqueante con el
                      paquete aiodns

opciones http

  -X <método>       - método de petición HTTP a usar, cualquier mayúscula/
                      minúscula (por defecto: get). use '?' para listar los
                      métodos disponibles.
  -a <user:pass>    - credenciales de autenticación http (formato: 'user:pass')
  -U <UA>           - establecer User-Agent personalizado (por defecto: último
                      ms edge, windows)
  -A                - usar user-agent aleatorio por petición
  -R <cabeceras>    - establecer cabeceras personalizadas (formato:
                      'foo=bar;lol=lulz;...')
  -C <cookies>      - establecer cookies (formato: 'foo=bar;lol=lulz;...')
  -F                - no seguir redirecciones HTTP
  -L <num>          - máximo de redirecciones a seguir (por defecto: 10; se
                      ignora con -F)
  -E                - verificar certificados TLS/SSL (por defecto: sin
                      verificación)
  -P <proxy>        - usar proxy (formato: '[http|https|socks4|socks5]://host:port')
                      (socks necesita el paquete 'httpx[socks]' / socksio)
  -f <códigos>      - solo informar de respuestas con los códigos de estado HTTP
                      dados, ej.: '200', '200,301,302'
  -e <códigos>      - excluir respuestas con los códigos de estado HTTP dados,
                      ej.: '404', '403,404,500'
  -2                - probar HTTP/2 (negociado por ALPN en TLS, retrocede a 1.1;
                      http plano permanece en 1.1). necesita el paquete 'h2'

opciones de búsqueda

  -s <cadena|archivo> - una sola cadena/regex o múltiples cadenas/regex en un
                      archivo para encontrar en cuerpos y cabeceras de respuestas
                      HTTP (ver -w), ej.: 'tomcat 8', '/tmp/igot0daysforthese.txt'
  -S <cadena|archivo> - invertir (grep -v): descartar TODAS las coincidencias de
                      una respuesta si esta cadena/regex (o archivo) aparece en
                      cualquier parte de su cuerpo o cabeceras, ej. para filtrar
                      páginas dinámicas de error / 404
  -w <dónde>        - dónde buscar: headers, body, o headers,body
                      (por defecto: headers,body)
  -b <bytes>        - número de bytes de contexto a mostrar desde una
                      coincidencia en el cuerpo (por defecto: 64)
  -m <tamaño>       - cuerpo máximo a leer + buscar; sufijo b/kb/mb, sin sufijo =
                      kb, ej.: 512, 1mb, 262144b (por defecto: 256kb)
  -i                - usar búsqueda sin distinción de mayúsculas/minúsculas
  -I                - usar inversión sin distinción de mayúsculas/minúsculas
                      (para -S)

opciones de escaneo

Categorías