
Outil Python multi‑threadé pour interroger l'API FOFA, extraire des champs personnalisés (IP, port, cert, TLS, etc.), dédupliquer les résultats et reprendre les recherches interrompues.
Un outil Python multi‑threadé puissant pour interroger l'API FOFA (Fofa.so), extraire les champs sélectionnés et enregistrer les résultats uniques avec un formatage intelligent.
ip, port, title, cert.*, tls.*, …)domains_*.txt, ips_*.txt)list affiche tous les champs valides)raw_input – facilement portable vers Python 3)requestsInstallez la dépendance :
pip install requests
🔧 Configuration
API_KEY = "PUT UR TOKEN HERE"
import os
API_KEY = os.getenv("FOFA_API_KEY", "your_default_key")
🚀 Utilisation
Exécutez le script :
python fofa_searcher.py
Vous serez invité interactivement :
[?] Enter FOFA query: domain="example.com"
[?] Enter max page to scrape [Default: 1]: 5
Chaque page renvoie jusqu'à SIZE_DEFAULT résultats.
[?] Enter fields [Default: host,ip,port]: host,ip,port,title,cert.sn
Saisissez list pour voir tous les champs valides (base, certificat, TLS).
Tous les résultats sont enregistrés dans OUTPUT_DIR avec un nom de fichier descriptif, ex. results/domains_example_com_20250315_143022.txt
📂 Exemples de sortie
Champ unique – avec libellé :
IP: 93.184.216.34
Port: 443
Title: Example Domain
Plusieurs champs – format compact :
93.184.216.34 | Port:443 | [Example Domain] | {US}
Champs Certificat / TLS – libellés clairs :
Cert Serial Number: 01:23:45:...
TLS version: TLSv1.2
🧩 Champs valides
L'outil prend en charge tous les champs FOFA courants ainsi que les champs certificat (cert.) et TLS (tls.).
Champs de base (liste partielle)
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
Champs de certificat
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
Champs TLS
tls.version, tls.ja3s
Saisissez list à l'invite des champs pour tous les voir.
⚙️ Variables de configuration (dans le script)
Variable Défaut Description CONCURRENT_THREADS 10 Nombre de requêtes de pages en parallèle SIZE_DEFAULT 100 Résultats par page (maximum autorisé par FOFA) OUTPUT_DIR results Répertoire où les fichiers de sortie sont enregistrés
📝 Notes importantes
· Le script utilise en.fofa.info comme point de terminaison API. · La déduplication repose sur la valeur du premier champ (ex. IP ou domaine) et est insensible à la casse. · Les chaînes longues (titres, bannières, en-têtes) sont tronquées dans la sortie pour une meilleure lisibilité. · Si vous interrompez le script (Ctrl+C), il se termine proprement. · Le script utilise actuellement raw_input de Python 2. Pour l'exécuter avec Python 3, remplacez raw_input par input et ajustez les instructions print.
❗ Dépannage
Problème Solution API_KEY non définie Modifiez le script et ajoutez votre clé. Champ(s) invalide(s) Exécutez le script et tapez list pour voir les champs autorisés. Aucun résultat Vérifiez la syntaxe de votre requête FOFA et vos crédits API. ImportError: No module named requests Installez requests avec pip install requests. UnicodeEncodeError Le script gère déjà l'encodage UTF‑8 ; assurez-vous que votre terminal le prend en charge.
📄 Licence
Licence MIT – libre d'utilisation et de modification pour vos propres besoins de reconnaissance. Remarque : l'utilisation de l'API FOFA est soumise aux conditions d'utilisation de FOFA.
🙌 Remerciements
Conçu pour le moteur de recherche FOFA – une plateforme puissante de recherche d'objets connectés (IoT) et d'actifs.
Bonne chasse ! 🔍