
DorX следующего поколения. Создано Dorks для Dorks. 🤓
DorXNG — это современное решение для сбора данных OSINT с использованием расширенных операторов поисковых систем через несколько внешних поисковых провайдеров. В его основе лежит специально созданный контейнеризированный образ SearXNG, самостоятельной, настраиваемой, ориентированной на конфиденциальность мета-поисковой системы.
Наша реализация SearXNG направляет все поисковые запросы через сеть Tor, обновляя цепи каждые десять секунд с помощью директивы конфигурации Tor MaxCircuitDirtiness. Мы также отключили все тайм-ауты на стороне клиента SearXNG. Эти настройки позволяют избежать ограничений поисковых систем, которые часто возникают при большом количестве повторяющихся запросов.
Клиентское приложение DorXNG написано на Python3 и взаимодействует с API SearXNG для одновременной отправки поисковых запросов. Оно даже может отправлять запросы через несколько экземпляров SearXNG. Полученные результаты поиска сохраняются в базе данных SQLite3.

Мы включили все поддерживаемые внешние поисковые системы, которые допускают запросы с расширенными операторами:
GoogleDuckDuckGoQwantBingBraveStartpageYahooДля получения дополнительной информации о том, какие поисковые системы поддерживает SearXNG, смотрите: Настроенные движки
Благодарность разработчикам Tor и SearXNG за то, что сделали это возможным. Пожертвуйте обоим проектам!
Благодарность разработчику pagodo за вдохновение и тот замечательный скрипт ghdb_scraper.py!
И последнее, но не менее важное: благодарность j0hnny. Оригинальный Дорк. 🧠🏴☠
Install DorXNG
git clone https://github.com/researchanddestroy/dorxng
cd dorxng
pip install -r requirements.txt
./DorXNG.py -h
Загрузите и запустите наш кастомный Docker-контейнер SearXNG (как минимум один). Можно использовать несколько экземпляров SearXNG. Используйте опцию --serverlist с DorXNG. См.: server.lst
docker run researchanddestroy/searxng:latest
Если вы хотите собрать контейнер самостоятельно:
git clone https://github.com/researchanddestroy/searxng # The URL must be all lowercase for the build process to complete
cd searxng
DOCKER_BUILDKIT=1 make docker.build
docker images
docker run <image-id>
По умолчанию DorXNG имеет жёстко закодированную переменную server в parse_args.py, которая установлена на IP-адрес, который Docker назначит первому контейнеру, запущенному на вашем компьютере: 172.17.0.2. Это можно изменить или переопределить с помощью --server или --serverlist.
Начать отправку поисковых запросов
./DorXNG.py -q 'search query'
Запросить базу данных DorXNG
./DorXNG.py -D 'regex search string'
-h, --help show this help message and exit
-s SERVER, --server SERVER
DorXNG Server Instance - Example: 'https://172.17.0.2/search'
-S SERVERLIST, --serverlist SERVERLIST
Issue Search Queries Across a List of Servers - Format: Newline Delimited
-q QUERY, --query QUERY
Issue a Search Query - Examples: 'search query' | '!tch search query' | 'site:example.com intext:example'
-Q QUERYLIST, --querylist QUERYLIST
Iterate Through a Search Query List - Format: Newline Delimited
-n NUMBER, --number NUMBER
Define the Number of Page Result Iterations
-c CONCURRENT, --concurrent CONCURRENT
Define the Number of Concurrent Page Requests
-l LIMITDATABASE, --limitdatabase LIMITDATABASE
Set Maximum Database Size Limit - Starts New Database After Exceeded - Example: --limitdatabase 10 (10k Database Entries) - Suggested Maximum Database Size is 50k
when doing Deep Recursion
-L LOOP, --loop LOOP Define the Number of Main Function Loop Iterations - Infinite Loop with 0
-d DATABASE, --database DATABASE
Specify SQL Database File - Default: 'dorxng.db'
-D DATABASEQUERY, --databasequery DATABASEQUERY
Issue Database Query - Format: Regex
-m MERGEDATABASE, --mergedatabase MERGEDATABASE
Merge SQL Database File - Example: --mergedatabase database.db
-t TIMEOUT, --timeout TIMEOUT
Specify Timeout Interval Between Requests - Default: 4 Seconds - Disable with 0
-r NONEWRESULTS, --nonewresults NONEWRESULTS
Specify Number of Iterations with No New Results - Default: 4 (3 Attempts) - Disable with 0
-v, --verbose Enable Verbose Output
-vv, --veryverbose Enable Very Verbose Output - Displays Raw JSON Output
Иногда вы можете попасть на выходной узел Tor, который уже заблокирован внешними поисковыми провайдерами, что приведёт к минимальному количеству результатов. Не волнуйтесь... Просто продолжайте отправлять запросы. 😉
Сохраните файл базы данных SQL DorXNG и повторно запустите команду, или используйте ключ --loop для многократного повторения основной функции. 🔁
Чаще всего, чем больше проходов вы делаете по поисковому запросу, тем больше результатов вы найдёте. 🍻
Также имейте в виду, что мы пожертвовали скоростью ради большего объёма данных. В конце концов, это проект OSINT. 🔎🌎
Каждый ваш поисковый запрос отправляется к 7 внешним поисковым провайдерам... Особенно с запросами --concurrent это создаёт много запросов... Поэтому наберитесь терпения.
Имейте в виду, что DorXNG будет продолжать добавлять новые результаты в ваш файл базы данных. Используйте ключ --database, чтобы указать имя файла базы данных; по умолчанию имя файла — dorxng.db. Возможно, для большинства это не важно, но если вы хотите разделять свои расследования OSINT, эта функция для вас.
Четыре одновременных запроса кажутся оптимальным количеством. Вы можете отправлять больше, но чем больше запросов одновременно, тем дольше ждать результаты. Также возрастает вероятность получения ответов HTTP/429 Too Many Requests от внешних поисковых провайдеров на данной цепи Tor.
Если вы запускаете несколько Docker-контейнеров SearXNG слишком быстро, соединения Tor могут не установиться. При инициализации контейнера правильный ответ от функции проверки подключения Tor выглядит так:
Checking Tor Connectivity..
{"IsTor":true,"IP":"<tor-exit-node>"}
Если вы видите что-то другое или начинаете получать коды ответа HTTP/500 от скрипта мониторинга SearXNG (STDOUT в контейнере), убейте Docker-контейнер и создайте новый.
Коды ответа HTTP/504 Gateway Time-out внутри DorXNG иногда ожидаемы. Это означает, что экземпляр SearXNG не получил ответа в течение минуты. Эта конкретная цепь Tor, вероятно, слишком медленная. Просто продолжайте!
На самом деле нет причин запускать кучу этих контейнеров... Пока... 😉 Сколько их запускать, действительно зависит от того, что вы делаете. Каждый контейнер использует примерно 1.25 ГБ оперативной памяти.
Запуск одного контейнера работает отлично, за исключением того, что вы, вероятно, пропустите результаты поиска. Поэтому используйте --loop и не отключайте --timeout.
Запуск нескольких контейнеров удобен, потому что у каждого своя цепь Tor, которая обновляется каждые 10 секунд.
При использовании режима --serverlist отключите функцию --timeout, чтобы не было задержки между запросами (по умолчанию интервал задержки составляет 4 секунды).
Имейте в виду: чем больше контейнеров вы запускаете, тем больше памяти потребуется. Это касается и глубокой рекурсии... Мы отключили максимальный лимит рекурсии Python... 🔁😉
Чем больше рекурсий проходит ваша команда, не возвращаясь в main, тем больше памяти потребляет процесс. Вы можете вернуться и обнаружить, что процесс аварийно завершился с сообщением Killed. Если это произошло, на вашем компьютере закончилась память, и процесс был убит. Но не волнуйтесь... Ваш файл базы данных всё ещё в порядке. 👍👍
Если ваш файл базы данных становится исключительно большим, это неизбежно замедляет программу и потребляет больше памяти с каждой итерацией... Эти стековые фреймы Python — толстые... 🍑😅
Мы заметили заметное падение производительности с файлами базы данных, превышающими примерно 50 тысяч записей.
Опция --limitdatabase была реализована для смягчения некоторых проблем с потреблением памяти. Используйте её в сочетании с --loop, чтобы прервать глубокую рекурсивную итерацию внутри iterator.py и перезапустить с main прямо с того места, где вы остановились.
Когда у вас есть серия файлов базы данных, вы можете объединить их все (по одному) с помощью --mergedatabase. Вы даже можете объединить их все в новый файл базы данных, если укажете неиспользуемое имя файла с --database.
Включённый файл query.lst содержит каждый дорк, который сейчас существует в Google Hacking Database (GHDB). См.: ghdb_scraper.py
Мы уже прогнали его для вас... 😉 Наш файл ghdb.db содержит более миллиона записей и продолжает расти! 🤩 Вы можете скачать его здесь ghdb.db, если хотите получить копию. 😉
Пример запроса к базе данных ghdb.db:
./DorXNG.py -d ghdb.db -D '^http.*\.sql$'
Переписывание DorXNG на Golang уже в процессе. 😉 (GorXNG? | DorXNGNG?) 😆
Нам понадобится больше дорков... 😅 Зацените DorkGPT 👀
Single Search Query
./DorXNG.py -q 'search query'
Concurrent Search Queries
./DorXNG.py -q 'search query' -c4
Page Iteration Mode
./DorXNG.py -q 'search query' -n4
Iterative Concurrent Search Queries
./DorXNG.py -q 'search query' -c4 -n64
Server List Iteration Mode
./DorXNG.py -S server.lst -q 'search query' -c4 -n64 -t0
Query List Iteration Mode
./DorXNG.py -Q query.lst -c4 -n64
Query and Server List Iteration
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0
Main Function Loop Iteration Mode
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L4
Infinite Main Function Loop Iteration Mode with a Database File Size Limit Set to 10k Entries
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L0 -l10
Merging a Database (One at a Time) into a New Database File
./DorXNG.py -d new-database.db -m dorxng.db
Merge All Database Files in the Current Working Directory into a New Database File
for i in `ls *.db`; do ./DorXNG.py -d new-database.db -m $i; done
Query a Database
./DorXNG.py -d new-database.db -D 'regex search string'