
wappalyzer-next v2.0.2
detectar tecnologias com alternativa ao wappalyzer
Wappalyzer Next
Este projeto é uma ferramenta de linha de comando e biblioteca Python que usa a extensão do navegador Wappalyzer e suas impressões digitais para detectar tecnologias. Outros projetos que surgiram após a descontinuação do projeto oficial de código aberto estão usando impressões digitais desatualizadas e carecem de precisão em aplicativos web dinâmicos. Este projeto contorna essas limitações executando a extensão no Chromium através do Playwright.

Instalação
Após instalar o pacote Python, instale o navegador Chromium do Playwright:
python -m playwright install chromium
Em contêineres Linux mínimos, instale também as dependências de sistema do Chromium:
python -m playwright install-deps chromium
Instalar como ferramenta de linha de comando
pipx install wappalyzer
pipx run --spec playwright playwright install chromium
Instalar como biblioteca
Para usar como biblioteca, instale-a com pip dentro de um contêiner isolado, por exemplo, venv ou docker. Você também pode usar --break-system-packages para fazer uma instalação 'normal', mas não é recomendado.
pip install wappalyzer
python -m playwright install chromium
Instalar com docker
Passos
- Clone o repositório:
git clone https://github.com/s0md3v/wappalyzer-next.git
cd wappalyzer-next
- Construa e execute com Docker Compose:
docker compose build
- Para escanear URLs usando o contêiner Docker:
- Escanear uma única URL:
docker compose run --rm wappalyzer -i https://example.com
- Escanear múltiplas URLs de um arquivo:
docker compose run --rm wappalyzer -i urls.txt -w 3 -oJ output.json
Para Usuários
Alguns exemplos comuns de uso são fornecidos abaixo; consulte a lista de todas as opções para mais informações.
- Escanear uma única URL:
wappalyzer -i https://example.com - Escanear múltiplas URLs de um arquivo:
wappalyzer -i urls.txt -w 3 - Definir tempo limite de carregamento de página para varreduras completas:
wappalyzer -i urls.txt -t 15 - Escanear com autenticação:
wappalyzer -i https://example.com -c "sessionid=abc123; token=xyz789" - Exportar resultados para JSON:
wappalyzer -i https://example.com -oJ results.json - Exportar JSON para stdout:
wappalyzer -i https://example.com -oJ
Quando uma flag de saída é usada sem um arquivo, o relatório é escrito em stdout. Linhas de status, texto do banner e erros são escritos em stderr.
Opções
Nota: Para precisão, use o tipo de varredura 'full' (padrão). 'fast' e 'balanced' não usam emulação de navegador.
-i: URL de entrada ou arquivo contendo URLs (uma por linha)--scan-type: Tipo de varredura (padrão: 'full')fast: Varredura rápida baseada em HTTP (envia 1 requisição)balanced: Varredura baseada em HTTP com mais requisiçõesfull: Varredura completa usando a extensão wappalyzer
-w, --workers: Número de workers concorrentes (padrão: 5; varreduras completas limitadas a 3)-t, --timeout: Máximo de segundos para aguardar o carregamento de página em varreduras completas (padrão: 30)-oJ [file]: Caminho do arquivo de saída JSON, ou stdout quando o arquivo é omitido ou definido como--oC [file]: Caminho do arquivo de saída CSV, ou stdout quando o arquivo é omitido ou definido como--oH [file]: Caminho do arquivo de saída HTML, ou stdout quando o arquivo é omitido ou definido como--c, --cookie: String do cabeçalho Cookie para varreduras autenticadas
Para Desenvolvedores
A biblioteca Python está disponível no pypi como wappalyzer e pode ser importada com o mesmo nome.
Usando a Biblioteca
Use Wappalyzer ao escanear mais de uma URL. O navegador é iniciado uma vez, reutilizado e fechado quando o bloco with termina.
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}")
O mesmo scanner também pode escanear uma URL por vez sem reabrir o 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')
Para uma única URL, analyze() é mais curta. Ela cria seu próprio scanner, executa uma varredura e o fecha.
from wappalyzer import analyze
results = analyze(
url='https://example.com',
scan_type='full', # 'fast', 'balanced', or 'full'
cookie='sessionid=abc123',
timeout=30
)
Não chame a função analyze() de nível superior em um loop para trabalhos grandes. Use Wappalyzer.analyze_many() ou Wappalyzer.analyze() em um scanner reutilizado para que o Chromium e a extensão Wappalyzer não sejam recarregados para cada URL.
Parâmetros da Função analyze()
url(str): A URL a ser analisadascan_type(str, opcional): Tipo de varredura a realizar'fast': Varredura rápida baseada em HTTP'balanced': Varredura baseada em HTTP com mais requisições'full': Varredura completa incluindo execução de JavaScript (padrão)
workers(int, opcional): Número de workers do navegador a criar para varreduras completas (padrão: 1)cookie(str, opcional): String do cabeçalho Cookie para varreduras autenticadastimeout(int, opcional): Máximo de segundos para aguardar o carregamento de página em varreduras completas (padrão: 30)
Valor de Retorno
Retorna um dicionário com a URL como chave e as tecnologias detectadas como valor:
{
"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": {}
}
FAQ
Por que Chromium e Playwright?
O scanner completo executa a extensão Wappalyzer no Chromium através do Playwright. O suporte a extensões do Chromium no Playwright é direto e não requer geckodriver ou Selenium.
Qual é a diferença entre os tipos de varredura 'fast', 'balanced' e 'full'?
- fast: Envia uma única requisição HTTP para a URL. Não usa a extensão.
- balanced: Envia requisições HTTP adicionais para arquivos .js, /robots.txt e faz consultas DNS. Não usa a extensão.
- full: Usa a extensão oficial do Wappalyzer para escanear a URL em um navegador headless.