
Многопоточный инструмент на Python для запросов к FOFA API, извлечения пользовательских полей (IP, port, cert, TLS и т. д.), дедупликации результатов и возобновления прерванных поисков.
Мощный многопоточный инструмент на Python для запросов к API FOFA (Fofa.so), извлечения выбранных полей и сохранения уникальных результатов с интеллектуальным форматированием.
ip, port, title, cert.*, tls.*, …)domains_*.txt, ips_*.txt)list показывает все допустимые поля)raw_input – легко переносится на Python 3)requestsУстановка зависимости:
pip install requests
🔧 Настройка
API_KEY = "PUT UR TOKEN HERE"
import os
API_KEY = os.getenv("FOFA_API_KEY", "your_default_key")
🚀 Использование
Запустите скрипт:
python fofa_searcher.py
Вам будут заданы интерактивные вопросы:
[?] Enter FOFA query: domain="example.com"
[?] Enter max page to scrape [Default: 1]: 5
Каждая страница возвращает до SIZE_DEFAULT результатов.
[?] Enter fields [Default: host,ip,port]: host,ip,port,title,cert.sn
Введите list, чтобы увидеть все допустимые поля (основные, сертификаты, TLS).
Все результаты сохраняются в OUTPUT_DIR с описательным именем файла, например: results/domains_example_com_20250315_143022.txt
📂 Примеры вывода
Одно поле – с понятной подписью:
IP: 93.184.216.34
Port: 443
Title: Example Domain
Несколько полей – компактный формат:
93.184.216.34 | Port:443 | [Example Domain] | {US}
Поля сертификата / TLS – понятные подписи:
Cert Serial Number: 01:23:45:...
TLS version: TLSv1.2
🧩 Допустимые поля
Инструмент поддерживает все распространённые поля FOFA, а также поля сертификатов (cert.) и TLS (tls.).
Основные поля (частичный список)
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
Поля сертификатов
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
Поля TLS
tls.version, tls.ja3s
Введите list в запросе полей, чтобы увидеть их все.
⚙️ Переменные конфигурации (внутри скрипта)
Переменная Значение по умолчанию Описание CONCURRENT_THREADS 10 Количество параллельных запросов страниц SIZE_DEFAULT 100 Результатов на страницу (максимум, разрешённый FOFA) OUTPUT_DIR results Каталог, в который сохраняются выходные файлы
📝 Важные замечания
· В скрипте используется en.fofa.info в качестве конечной точки API. · Дедупликация основана на значении первого поля (например, IP или домена) и не учитывает регистр. · Длинные строки (заголовки, баннеры, заголовки HTTP) усекаются в выводе для удобочитаемости. · Если прервать скрипт (Ctrl+C), он завершится корректно. · В настоящее время скрипт использует Python 2 raw_input. Для запуска с Python 3 замените raw_input на input и обновите операторы print.
❗ Устранение неполадок
Проблема Решение API_KEY не задан Отредактируйте скрипт и добавьте свой ключ. Недопустимые поля Запустите скрипт и введите list, чтобы увидеть разрешённые поля. Нет результатов Проверьте синтаксис запроса FOFA и свои кредиты API. ImportError: No module named requests Установите requests с помощью pip install requests. UnicodeEncodeError Скрипт уже обрабатывает кодировку UTF‑8; убедитесь, что ваш терминал её поддерживает.
📄 Лицензия
Лицензия MIT – можно свободно использовать и изменять для собственных задач разведки. Примечание: использование API FOFA регулируется условиями обслуживания FOFA.
🙌 Благодарности
Создано для поисковой системы FOFA – мощной платформы поиска устройств и активов.
Удачной охоты! 🔍