
rileva tecnologie con un'alternativa a Wappalyzer
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.

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
pipx install wappalyzer
pipx run --spec playwright playwright install chromium
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
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
Di seguito sono riportati alcuni esempi di utilizzo comuni; fare riferimento all'elenco completo delle opzioni per maggiori informazioni.
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 -oJQuando 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.
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 La libreria Python è disponibile su PyPI come wappalyzer e può essere importata con lo stesso nome.
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.
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)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": {}
}
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.
--c, --cookie: Stringa dell'intestazione cookie per scansioni autenticate