
Herramienta Python multihilo para consultar la API de FOFA, extraer campos personalizados (IP, port, cert, TLS, etc.), deduplicar resultados y reanudar búsquedas interrumpidas.
Una potente herramienta Python multi‑hilo para consultar la API de FOFA (Fofa.so), extraer campos seleccionados y guardar resultados únicos con un formateo inteligente.
ip, port, title, cert.*, tls.*, …)domains_*.txt, ips_*.txt)list muestra todos los campos válidos)raw_input – fácilmente portable a Python 3)requestsInstala la dependencia:
pip install requests
🔧 Configuración
API_KEY = "PUT UR TOKEN HERE"
import os
API_KEY = os.getenv("FOFA_API_KEY", "your_default_key")
🚀 Uso
Ejecuta el script:
python fofa_searcher.py
Se te solicitará información de forma interactiva:
[?] Enter FOFA query: domain="example.com"
[?] Enter max page to scrape [Default: 1]: 5
Cada página devuelve hasta SIZE_DEFAULT resultados.
[?] Enter fields [Default: host,ip,port]: host,ip,port,title,cert.sn
Escribe list para ver todos los campos válidos (básicos, certificados, TLS).
Todos los resultados se guardan en OUTPUT_DIR con un nombre de archivo descriptivo, p. ej. results/domains_example_com_20250315_143022.txt
📂 Ejemplos de salida
Campo único – bien etiquetado:
IP: 93.184.216.34
Port: 443
Title: Example Domain
Campos múltiples – formato compacto:
93.184.216.34 | Port:443 | [Example Domain] | {US}
Campos de certificado / TLS – etiquetas claras:
Cert Serial Number: 01:23:45:...
TLS version: TLSv1.2
🧩 Campos válidos
La herramienta admite todos los campos FOFA comunes además de los campos de certificado (cert.) y TLS (tls.).
Campos básicos (lista parcial)
ip, port, protocol, base_protocol, host, domain, title, server, country, region, city, os, asn, org, banner, header, body, cname, icp, jarm, icon, fid, status_code, product
Campos de certificado
cert, cert.sn, cert.not_after, cert.not_before, cert.domain, cert.subject.org, cert.subject.cn, cert.issuer.org, cert.issuer.cn, cert.is_valid, cert.is_match, cert.is_equal
Campos TLS
tls.version, tls.ja3s
Escribe list durante el indicador de campos para verlos todos.
⚙️ Variables de configuración (dentro del script)
Variable Valor por defecto Descripción CONCURRENT_THREADS 10 Número de solicitudes de página en paralelo SIZE_DEFAULT 100 Resultados por página (máximo permitido por FOFA) OUTPUT_DIR results Directorio donde se guardan los archivos de salida
📝 Notas importantes
· El script usa en.fofa.info como endpoint de la API. · La desduplicación se basa en el valor del primer campo (p. ej., IP o dominio) y no distingue entre mayúsculas y minúsculas. · Las cadenas largas (títulos, banners, cabeceras) se truncan en la salida para facilitar la lectura. · Si interrumpes el script (Ctrl+C), se cierra de forma segura. · El script usa actualmente raw_input de Python 2. Para ejecutarlo con Python 3, reemplaza raw_input por input y ajusta las sentencias print.
❗ Solución de problemas
Problema Solución API_KEY no establecido Edita el script y añade tu clave. Campo(s) no válido(s) Ejecuta el script y escribe list para ver los campos permitidos. Sin resultados Comprueba la sintaxis de tu consulta FOFA y tus créditos de API. ImportError: No module named requests Instala requests con pip install requests. UnicodeEncodeError El script ya maneja la codificación UTF‑8; asegúrate de que tu terminal sea compatible.
📄 Licencia
Licencia MIT – libre de usar y modificar para tus propias necesidades de reconocimiento. Nota: El uso de la API de FOFA está sujeto a los términos de servicio de FOFA.
🙌 Agradecimientos
Construido para el motor de búsqueda FOFA – una potente plataforma de búsqueda de IoT y activos.
¡Buena caza! 🔍