Torna agli aggiornamenti
New releaseAug 19, 2026

wappalyzer-next v2.0.2

rileva tecnologie con un'alternativa a Wappalyzer

Condividi

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.

demo

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
  1. Clona il repository:
git clone https://github.com/s0md3v/wappalyzer-next.git
cd wappalyzer-next
  1. Compila ed esegui con Docker Compose:
docker compose build
  1. 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ù richieste
    • full: 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 analizzare
  • scan_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 autenticate
  • timeout (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.

Categorie