
Détecter les technologies avec une alternative à Wappalyzer
Ce projet est un outil en ligne de commande et une bibliothèque Python qui utilise l'extension de navigateur Wappalyzer et ses empreintes numériques pour détecter les technologies. D'autres projets apparus après l'arrêt du projet open-source officiel utilisent des empreintes obsolètes et manquent de précision sur les applications web dynamiques. Ce projet contourne ces limitations en exécutant l'extension dans Chromium via Playwright.

Après avoir installé le paquet Python, installez le navigateur Chromium de Playwright :
python -m playwright install chromium
Dans les conteneurs Linux minimaux, installez également les dépendances système de Chromium :
python -m playwright install-deps chromium
pipx install wappalyzer
pipx run --spec playwright playwright install chromium
Pour l'utiliser comme bibliothèque, installez-la avec pip dans un conteneur isolé, par exemple venv ou docker. Vous pouvez aussi utiliser --break-system-packages pour une installation « normale », mais ce n'est pas recommandé.
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
Quelques exemples d'utilisation courante sont donnés ci-dessous, reportez-vous à la liste de toutes les options pour plus d'informations.
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 -oJLorsqu'un indicateur de sortie est utilisé sans fichier, le rapport est écrit sur stdout. Les lignes de statut, le texte de bannière et les erreurs sont écrits sur stderr.
Note : Pour la précision, utilisez le type d'analyse 'full' (par défaut). 'fast' et 'balanced' n'utilisent pas l'émulation de navigateur.
-i : URL d'entrée ou fichier contenant des URL (une par ligne)--scan-type : Type d'analyse (par défaut : 'full')
fast : Analyse rapide basée sur HTTP (envoie 1 requête)balanced : Analyse basée sur HTTP avec plus de requêtesfull : Analyse complète utilisant l'extension wappalyzer-w, --workers : Nombre de workers simultanés (par défaut : 5 ; les analyses complètes sont limitées à 3)-t, --timeout : Nombre maximal de secondes à attendre le chargement d'une page dans les analyses complètes (par défaut : 30)-oJ [file] : Chemin du fichier de sortie JSON, ou stdout lorsque le fichier est omis ou défini sur --oC [file] : Chemin du fichier de sortie CSV, ou stdout lorsque le fichier est omis ou défini sur --oH [file] : Chemin du fichier de sortie HTML, ou stdout lorsque le fichier est omis ou défini sur La bibliothèque Python est disponible sur PyPI en tant que wappalyzer et peut être importée sous le même nom.
Utilisez Wappalyzer lorsque vous analysez plus d'une URL. Le navigateur est démarré une fois, réutilisé et fermé à la sortie du bloc 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}")
Le même scanner peut également analyser une seule URL à la fois sans rouvrir 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')
Pour une seule URL, analyze() est plus court. Il crée son propre scanner, exécute une analyse et le ferme.
from wappalyzer import analyze
results = analyze(
url='https://example.com',
scan_type='full', # 'fast', 'balanced', or 'full'
cookie='sessionid=abc123',
timeout=30
)
N'appelez pas la fonction analyze() de premier niveau dans une boucle pour les tâches volumineuses. Utilisez Wappalyzer.analyze_many() ou Wappalyzer.analyze() sur un scanner réutilisé afin que Chromium et l'extension Wappalyzer ne soient pas rechargés pour chaque URL.
url (str) : L'URL à analyserscan_type (str, optionnel) : Type d'analyse à effectuer
'fast' : Analyse rapide basée sur HTTP'balanced' : Analyse basée sur HTTP avec plus de requêtes'full' : Analyse complète incluant l'exécution JavaScript (par défaut)workers (int, optionnel) : Nombre de workers de navigateur à créer pour les analyses complètes (par défaut : 1)cookie (str, optionnel) : Chaîne d'en-tête de cookie pour les analyses authentifiéestimeout (int, optionnel) : Nombre maximal de secondes à attendre le chargement d'une page dans les analyses complètes (par défaut : 30)Renvoie un dictionnaire avec l'URL comme clé et les technologies détectées comme valeur :
{
"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": {}
}
Le scanner complet exécute l'extension Wappalyzer dans Chromium via Playwright. La prise en charge des extensions Chromium dans Playwright est directe et ne nécessite ni geckodriver ni Selenium.
--c, --cookie : Chaîne d'en-tête de cookie pour les analyses authentifiées