
Technologien mit einer Wappalyzer-Alternative erkennen
Dieses Projekt ist ein Kommandozeilenwerkzeug und eine Python-Bibliothek, die die Wappalyzer-Browsererweiterung und deren Fingerabdrücke nutzt, um Technologien zu erkennen. Andere Projekte, die nach der Einstellung des offiziellen Open-Source-Projekts entstanden sind, verwenden veraltete Fingerabdrücke und sind bei dynamischen Webanwendungen ungenau. Dieses Projekt umgeht diese Einschränkungen, indem es die Erweiterung in Chromium über Playwright ausführt.

Nach der Installation des Python-Pakets installieren Sie Playwrights Chromium-Browser:
python -m playwright install chromium
Installieren Sie in minimalen Linux-Containern auch die Systemabhängigkeiten von Chromium:
python -m playwright install-deps chromium
pipx install wappalyzer
pipx run --spec playwright playwright install chromium
Um es als Bibliothek zu verwenden, installieren Sie es mit pip in einem isolierten Container, z. B. venv oder docker. Sie können auch --break-system-packages verwenden, um eine 'normale' Installation durchzuführen, dies wird jedoch nicht empfohlen.
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
Einige häufige Anwendungsbeispiele sind unten aufgeführt; für weitere Informationen siehe die Liste aller Optionen.
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 -oJWenn ein Ausgabeflag ohne Datei verwendet wird, wird der Bericht nach stdout geschrieben. Statuszeilen, Bannertext und Fehler werden nach stderr geschrieben.
Hinweis: Verwenden Sie für Genauigkeit den Scan-Typ 'full' (Standard). 'fast' und 'balanced' verwenden keine Browser-Emulation.
-i: Eingabe-URL oder Datei mit URLs (eine pro Zeile)--scan-type: Scan-Typ (Standard: 'full')
fast: Schneller HTTP-basierter Scan (sendet 1 Anfrage)balanced: HTTP-basierter Scan mit mehreren Anfragenfull: Vollständiger Scan mit der Wappalyzer-Erweiterung-w, --workers: Anzahl der gleichzeitigen Worker (Standard: 5; vollständige Scans sind auf 3 begrenzt)-t, --timeout: Maximale Sekunden, die auf das Laden einer Seite bei vollständigen Scans gewartet werden soll (Standard: 30)-oJ [datei]: JSON-Ausgabedateipfad oder stdout, wenn die Datei weggelassen oder auf - gesetzt wird-oC [datei]: CSV-Ausgabedateipfad oder stdout, wenn die Datei weggelassen oder auf - gesetzt wird-oH [datei]: HTML-Ausgabedateipfad oder stdout, wenn die Datei weggelassen oder auf gesetzt wirdDie Python-Bibliothek ist auf pypi als wappalyzer verfügbar und kann unter demselben Namen importiert werden.
Verwenden Sie Wappalyzer, wenn Sie mehr als eine URL scannen. Der Browser wird einmal gestartet, wiederverwendet und geschlossen, wenn der with-Block verlassen wird.
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}")
Der gleiche Scanner kann auch eine URL nach der anderen scannen, ohne Chromium neu zu öffnen:
from wappalyzer import Wappalyzer
with Wappalyzer(workers=3, timeout=30) as scanner:
github = scanner.analyze('https://github.com')
python = scanner.analyze('https://python.org')
Für eine einzelne URL ist analyze() kürzer. Es erstellt einen eigenen Scanner, führt einen Scan durch und schließt ihn.
from wappalyzer import analyze
results = analyze(
url='https://example.com',
scan_type='full', # 'fast', 'balanced' oder 'full'
cookie='sessionid=abc123',
timeout=30
)
Rufen Sie die analyze()-Funktion der obersten Ebene nicht in einer Schleife für große Aufgaben auf. Verwenden Sie Wappalyzer.analyze_many() oder Wappalyzer.analyze() auf einem wiederverwendeten Scanner, damit Chromium und die Wappalyzer-Erweiterung nicht für jede URL neu geladen werden.
url (str): Die zu analysierende URLscan_type (str, optional): Art des durchzuführenden Scans
'fast': Schneller HTTP-basierter Scan'balanced': HTTP-basierter Scan mit mehreren Anfragen'full': Vollständiger Scan einschließlich JavaScript-Ausführung (Standard)workers (int, optional): Anzahl der Browser-Worker, die für vollständige Scans erstellt werden sollen (Standard: 1)cookie (str, optional): Cookie-Header-Zeichenfolge für authentifizierte Scanstimeout (int, optional): Maximale Sekunden, die auf das Laden einer Seite bei vollständigen Scans gewartet werden soll (Standard: 30)Gibt ein Wörterbuch mit der URL als Schlüssel und den erkannten Technologien als Wert zurück:
{
"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": {}
}
Der vollständige Scanner führt die Wappalyzer-Erweiterung in Chromium über Playwright aus. Die Chromium-Erweiterungsunterstützung in Playwright ist direkt und erfordert weder geckodriver noch Selenium.
--c, --cookie: Cookie-Header-Zeichenfolge für authentifizierte Scans