
обнаружение технологий с помощью альтернативы Wappalyzer
Этот проект представляет собой инструмент командной строки и библиотеку Python, которые используют расширение браузера Wappalyzer и его отпечатки для обнаружения технологий. Другие проекты, появившиеся после прекращения поддержки официального проекта с открытым исходным кодом, используют устаревшие отпечатки и не обеспечивают точность на динамических веб-приложениях. Этот проект обходит эти ограничения, запуская расширение в Chromium через Playwright.

После установки пакета Python установите браузер Chromium от Playwright:
python -m playwright install chromium
В минимальных контейнерах Linux также установите системные зависимости Chromium:
python -m playwright install-deps chromium
pipx install wappalyzer
pipx run --spec playwright playwright install chromium
Для использования в качестве библиотеки установите её с помощью pip в изолированное окружение, например venv или docker. Также можно использовать --break-system-packages для «обычной» установки, но это не рекомендуется.
pip install wappalyzer
python -m playwright install chromium
git clone https://github.com/s0md3v/wappalyzer-next.git
cd wappalyzer-next
docker compose build
docker compose run --rm wappalyzer -i https://example.com
docker compose run --rm wappalyzer -i urls.txt -w 3 -oJ output.json
Ниже приведены некоторые распространённые примеры использования. Полный список опций см. в разделе со всеми параметрами.
wappalyzer -i https://example.comwappalyzer -i urls.txt -w 3wappalyzer -i urls.txt -t 15wappalyzer -i https://example.com -c "sessionid=abc123; token=xyz789"wappalyzer -i https://example.com -oJ results.jsonwappalyzer -i https://example.com -oJЕсли флаг вывода указан без имени файла, отчёт выводится в stdout. Строки состояния, текст баннера и ошибки выводятся в stderr.
Примечание: для точности используйте тип сканирования 'full' (по умолчанию). Типы 'fast' и 'balanced' не используют эмуляцию браузера.
-i: URL или файл со списком URL (по одному на строку)--scan-type: Тип сканирования (по умолчанию: 'full')
fast: Быстрое HTTP-сканирование (отправляет 1 запрос)balanced: HTTP-сканирование с большим количеством запросовfull: Полное сканирование с использованием расширения wappalyzer-w, --workers: Количество параллельных потоков (по умолчанию: 5; для полного сканирования не более 3)-t, --timeout: Максимальное время ожидания загрузки страницы в полном сканировании в секундах (по умолчанию: 30)-oJ [файл]: Путь к файлу JSON для вывода; вывод в stdout, если файл опущен или указан --oC [файл]: Путь к файлу CSV для вывода; вывод в stdout, если файл опущен или указан --oH [файл]: Путь к файлу HTML для вывода; вывод в stdout, если файл опущен или указан Библиотека Python доступна на pypi под именем wappalyzer и может быть импортирована с тем же именем.
Используйте Wappalyzer при сканировании более одного URL. Браузер запускается один раз, используется повторно и закрывается при выходе из блока with.
from wappalyzer import Wappalyzer
with Wappalyzer(workers=3, timeout=30) as scanner:
results = scanner.analyze_many([
'https://example.com',
'https://github.com',
'https://python.org',
])
for url, technologies in results.items():
print(url)
for name, data in technologies.items():
version = f" {data['version']}" if data['version'] else ""
print(f" {name}{version}")
Тот же сканер также может сканировать по одному URL без повторного открытия Chromium:
from wappalyzer import Wappalyzer
with Wappalyzer(workers=3, timeout=30) as scanner:
github = scanner.analyze('https://github.com')
python = scanner.analyze('https://python.org')
Для одного URL функция analyze() короче. Она создаёт собственный сканер, выполняет одно сканирование и закрывает его.
from wappalyzer import analyze
results = analyze(
url='https://example.com',
scan_type='full', # 'fast', 'balanced', или 'full'
cookie='sessionid=abc123',
timeout=30
)
Не вызывайте функцию верхнего уровня analyze() в цикле для больших задач. Используйте Wappalyzer.analyze_many() или Wappalyzer.analyze() на переиспользуемом сканере, чтобы Chromium и расширение Wappalyzer не перезагружались для каждого URL.
url (str): URL для анализаscan_type (str, необязательно): Тип выполняемого сканирования
'fast': Быстрое HTTP-сканирование'balanced': HTTP-сканирование с большим количеством запросов'full': Полное сканирование с выполнением JavaScript (по умолчанию)workers (int, необязательно): Количество рабочих потоков браузера для полного сканирования (по умолчанию: 1)cookie (str, необязательно): Строка заголовка Cookie для сканирования с аутентификациейtimeout (int, необязательно): Максимальное время ожидания загрузки страницы в полном сканировании в секундах (по умолчанию: 30)Возвращает словарь, где ключом является URL, а значением — словарь обнаруженных технологий:
{
"https://github.com": {
"Amazon S3": {
"version": "",
"confidence": 100,
"categories": ["CDN"],
"groups": ["Servers"]
},
"React Router": {
"version": "6",
"confidence": 100,
"categories": ["JavaScript frameworks"],
"groups": ["Web development"]
}
},
"https://example.com": {}
}
Полный сканер запускает расширение Wappalyzer в Chromium через Playwright. Поддержка расширений Chromium в Playwright является прямой и не требует geckodriver или Selenium.
--c, --cookie: Строка заголовка Cookie для сканирования с аутентификацией