Автор статьи описывает процесс создания инструмента Web-Recon для автоматизации сбора OSINT-данных и фиксации сетевых инцидентов в Linux. Целью было разработать отказоустойчивое решение, не требующее сложной настройки и способное обходить анти-бот системы, при этом сохраняя историю проверок в структурированной локальной базе данных. Статья детально разбирает эволюцию проекта от первой версии до внедрения асинхронности и решения проблем с параллельной записью в SQLite3.
Первый этап, версия 0.1.0, представлял собой простой исследовательский скрипт на библиотеке requests, который принимал одну ссылку через стандартный ввод и сохранял отчеты в JSON-файл. Основная проблема возникла при взаимодействии с крупными сайтами, защищенными системами вроде Cloudflare: скрипт получал коды 403 Forbidden и 401 Unauthorized, хотя ссылки работали в браузере. Решение заключалось в подмене заголовка User-Agent на валидный параметр современного браузера Google Chrome под управлением Windows, что позволило серверам воспринимать запросы как исходящие от живого пользователя.
В версии 0.2.1 инструмент был переработан для работы со списками из множества сайтов, которые теперь читались из файла. Для ускорения процесса сканирования был внедрен асинхронный пул потоков ThreadPoolExecutor с количеством рабочих процессов до 10, что позволило опрашивать десятки адресов одновременно. Также в этой версии появилась база данных SQLite для постоянного хранения результатов в файле reconReport.db. Однако при тестировании был обнаружен критический дефект: данные, полученные через модуль WHOIS, не передавались в функцию записи и терялись в оперативной памяти.
Патч версии 0.2.2 исправил архитектурные ошибки и проблему блокировки базы данных. Разработчик изменил логику так, чтобы каждый поток самостоятельно дожидался ответа WHOIS и собирал данные в потокобезопасный словарь, а запись в базу осуществлялась строго в одном потоке после завершения работы воркеров. Это исключило ошибку database is locked, возникающую при одновременной записи нескольких потоков в один файл SQLite. Автор делится выводами о важности архитектуры на стыке технологий и необходимости использования реляционных баз данных для долгосрочного мониторинга.
В заключение автор сообщает о планах по разработке версии 0.3.0, которая будет включать бенчмаркинг скорости и функцию автоматического скачивания целевых файлов сайта при успешном ответе 200. Весь код проекта, история релизов и документация доступны в репозитории на GitHub. Автор приглашает сообщество к конструктивной критике и предлагает обсудить оптимизацию кода и архитектуру в комментариях или через Issues на платформе.