
wappalyzer-next v2.0.2
rileva tecnologie con un'alternativa a Wappalyzer
Wappalyzer Next
Questo progetto è uno strumento da riga di comando e una libreria Python che utilizza l'estensione del browser Wappalyzer e le sue impronte digitali per rilevare le tecnologie. Altri progetti nati dopo la sospensione del progetto open source ufficiale utilizzano impronte digitali obsolete e mancano di precisione sulle app web dinamiche. Questo progetto supera queste limitazioni eseguendo l'estensione in Chromium tramite Playwright.

Installazione
Dopo aver installato il pacchetto Python, installa il browser Chromium di Playwright:
python -m playwright install chromium
Nei container Linux minimali, installa anche le dipendenze di sistema di Chromium:
python -m playwright install-deps chromium
Installa come strumento da riga di comando
pipx install wappalyzer
pipx run --spec playwright playwright install chromium
Installa come libreria
Per usarlo come libreria, installalo con pip all'interno di un contenitore isolato, ad es. venv o docker. Puoi anche usare --break-system-packages per un'installazione 'normale', ma non è consigliato.
pip install wappalyzer
python -m playwright install chromium
Installa con Docker
Passaggi
- Clona il repository:
git clone https://github.com/s0md3v/wappalyzer-next.git
cd wappalyzer-next
- Compila ed esegui con Docker Compose:
docker compose build
- Per scansionare URL usando il container Docker:
- Scansiona un singolo URL:
docker compose run --rm wappalyzer -i https://example.com
- Scansiona più URL da un file:
docker compose run --rm wappalyzer -i urls.txt -w 3 -oJ output.json
Per gli utenti
Di seguito sono riportati alcuni esempi di utilizzo comuni; fare riferimento all'elenco completo delle opzioni per maggiori informazioni.
- Scansiona un singolo URL:
wappalyzer -i https://example.com - Scansiona più URL da un file:
wappalyzer -i urls.txt -w 3 - Imposta il timeout di caricamento pagina per scansioni complete:
wappalyzer -i urls.txt -t 15 - Scansiona con autenticazione:
wappalyzer -i https://example.com -c "sessionid=abc123; token=xyz789" - Esporta i risultati in JSON:
wappalyzer -i https://example.com -oJ results.json - Esporta JSON su stdout:
wappalyzer -i https://example.com -oJ
Quando viene usato un flag di output senza specificare un file, il report viene scritto su stdout. Le righe di stato, il testo del banner e gli errori vengono scritti su stderr.
Opzioni
Nota: per la precisione, usa il tipo di scansione 'full' (predefinita). 'fast' e 'balanced' non usano l'emulazione del browser.
-i: URL di input o file contenente URL (uno per riga)--scan-type: Tipo di scansione (predefinito: 'full')fast: Scansione rapida basata su HTTP (invia 1 richiesta)balanced: Scansione basata su HTTP con più richiestefull: Scansione completa utilizzando l'estensione wappalyzer
-w, --workers: Numero di worker concorrenti (predefinito: 5; le scansioni full sono limitate a 3)-t, --timeout: Secondi massimi di attesa per il caricamento della pagina nelle scansioni full (predefinito: 30)-oJ [file]: Percorso del file di output JSON, o stdout se il file viene omesso o impostato a--oC [file]: Percorso del file di output CSV, o stdout se il file viene omesso o impostato a--oH [file]: Percorso del file di output HTML, o stdout se il file viene omesso o impostato a--c, --cookie: Stringa dell'intestazione cookie per scansioni autenticate
Per gli sviluppatori
La libreria Python è disponibile su PyPI come wappalyzer e può essere importata con lo stesso nome.
Uso della libreria
Usa Wappalyzer quando si scansiona più di un URL. Il browser viene avviato una volta, riutilizzato e chiuso quando il blocco 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}")
Lo stesso scanner può anche scansionare un URL alla volta senza riaprire 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')
Per un singolo URL, analyze() è più breve. Crea un proprio scanner, esegue una scansione e lo chiude.
from wappalyzer import analyze
results = analyze(
url='https://example.com',
scan_type='full', # 'fast', 'balanced', o 'full'
cookie='sessionid=abc123',
timeout=30
)
Non chiamare la funzione analyze() di alto livello in un ciclo per grandi lavori. Usa Wappalyzer.analyze_many() o Wappalyzer.analyze() su uno scanner riutilizzato in modo che Chromium e l'estensione Wappalyzer non vengano ricaricati per ogni URL.
Parametri della funzione analyze()
url(str): L'URL da analizzarescan_type(str, opzionale): Tipo di scansione da eseguire'fast': Scansione rapida basata su HTTP'balanced': Scansione basata su HTTP con più richieste'full': Scansione completa inclusa l'esecuzione JavaScript (predefinito)
workers(int, opzionale): Numero di worker del browser da creare per le scansioni full (predefinito: 1)cookie(str, opzionale): Stringa dell'intestazione cookie per scansioni autenticatetimeout(int, opzionale): Secondi massimi di attesa per il caricamento della pagina nelle scansioni full (predefinito: 30)
Valore restituito
Restituisce un dizionario con l'URL come chiave e le tecnologie rilevate come valore:
{
"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
Perché Chromium e Playwright?
Lo scanner completo esegue l'estensione Wappalyzer in Chromium tramite Playwright. Il supporto delle estensioni di Chromium in Playwright è diretto e non richiede geckodriver o Selenium.
Qual è la differenza tra i tipi di scansione 'fast', 'balanced' e 'full'?
- fast: Invia una singola richiesta HTTP all'URL. Non usa l'estensione.
- balanced: Invia ulteriori richieste HTTP a file .js, /robots.txt ed esegue query DNS. Non usa l'estensione.
- full: Usa l'estensione ufficiale Wappalyzer per scansionare l'URL in un browser headless.