
wappalyzer-next v2.0.2
Wappalyzerの代替でテクノロジーを検出
Wappalyzer Next
このプロジェクトは、Wappalyzerブラウザ拡張機能とそのフィンガープリントを使用して技術を検出するコマンドラインツールおよびPythonライブラリです。公式オープンソースプロジェクトの終了後に登場した他のプロジェクトは、古いフィンガープリントを使用しており、動的Webアプリでの精度が不足しています。このプロジェクトは、Playwrightを介してChromiumで拡張機能を実行することで、これらの制限を回避します。

インストール
Pythonパッケージをインストールした後、PlaywrightのChromiumブラウザをインストールします:
python -m playwright install chromium
最小限のLinuxコンテナでは、Chromiumのシステム依存関係もインストールしてください:
python -m playwright install-deps chromium
コマンドラインツールとしてインストール
pipx install wappalyzer
pipx run --spec playwright playwright install chromium
ライブラリとしてインストール
ライブラリとして使用するには、pip を隔離されたコンテナ(例:venv や docker)内でインストールしてください。通常のインストールのために --break-system-packages を使用することもできますが、推奨されません。
pip install wappalyzer
python -m playwright install chromium
Dockerでインストール
手順
- リポジトリをクローン:
git clone https://github.com/s0md3v/wappalyzer-next.git
cd wappalyzer-next
- Docker Composeでビルドして実行:
docker compose build
- Dockerコンテナを使用してURLをスキャンするには:
- 単一のURLをスキャン:
docker compose run --rm wappalyzer -i https://example.com
- ファイルから複数のURLをスキャン:
docker compose run --rm wappalyzer -i urls.txt -w 3 -oJ output.json
ユーザー向け
一般的な使用例を以下に示します。詳細は全オプションのリストを参照してください。
- 単一のURLをスキャン:
wappalyzer -i https://example.com - ファイルから複数のURLをスキャン:
wappalyzer -i urls.txt -w 3 - フルスキャンのページロードタイムアウトを設定:
wappalyzer -i urls.txt -t 15 - 認証付きでスキャン:
wappalyzer -i https://example.com -c "sessionid=abc123; token=xyz789" - JSONに結果をエクスポート:
wappalyzer -i https://example.com -oJ results.json - JSONをstdoutにエクスポート:
wappalyzer -i https://example.com -oJ
出力フラグがファイルなしで使用されると、レポートはstdoutに書き込まれます。ステータス行、バナーテキスト、エラーはstderrに書き込まれます。
オプション
注: 正確性を重視する場合は'full'スキャンタイプ(デフォルト)を使用してください。'fast'および'balanced'はブラウザエミュレーションを使用しません。
-i: 入力URLまたはURLを含むファイル(1行に1つ)--scan-type: スキャンタイプ(デフォルト: 'full')fast: 高速HTTPベースのスキャン(1リクエスト送信)balanced: より多くのリクエストを送信するHTTPベースのスキャンfull: wappalyzer拡張機能を使用した完全スキャン
-w, --workers: 同時ワーカー数(デフォルト: 5; フルスキャンは最大3)-t, --timeout: フルスキャンでページロードを待機する最大秒数(デフォルト: 30)-oJ [file]: JSON出力ファイルパス。ファイルを省略または-に設定した場合はstdout-oC [file]: CSV出力ファイルパス。ファイルを省略または-に設定した場合はstdout-oH [file]: HTML出力ファイルパス。ファイルを省略または-に設定した場合はstdout-c, --cookie: 認証スキャン用のCookieヘッダー文字列
開発者向け
Pythonライブラリはpypiでwappalyzerとして利用可能で、同じ名前でインポートできます。
ライブラリの使用
複数のURLをスキャンする場合はWappalyzerを使用してください。ブラウザは一度起動され、再利用され、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}")
同じスキャナーを使用して、Chromiumを再起動せずに一度に1つのURLをスキャンすることもできます:
from wappalyzer import Wappalyzer
with Wappalyzer(workers=3, timeout=30) as scanner:
github = scanner.analyze('https://github.com')
python = scanner.analyze('https://python.org')
単一のURLの場合、analyze()の方が短くなります。自身のスキャナーを作成し、1回のスキャンを実行して閉じます。
from wappalyzer import analyze
results = analyze(
url='https://example.com',
scan_type='full', # 'fast', 'balanced', or 'full'
cookie='sessionid=abc123',
timeout=30
)
大量のジョブでは、ループ内でトップレベルのanalyze()関数を呼び出さないでください。Wappalyzer.analyze_many()または再利用するスキャナーでWappalyzer.analyze()を使用することで、毎回ChromiumとWappalyzer拡張機能が再読み込みされるのを防ぎます。
analyze() 関数のパラメータ
url(str): 分析するURLscan_type(str, オプション): 実行するスキャンの種類'fast': 高速HTTPベースのスキャン'balanced': より多くのリクエストを送信するHTTPベースのスキャン'full': JavaScript実行を含む完全スキャン(デフォルト)
workers(int, オプション): フルスキャン用に作成するブラウザワーカー数(デフォルト: 1)cookie(str, オプション): 認証スキャン用のCookieヘッダー文字列timeout(int, オプション): フルスキャンでページロードを待機する最大秒数(デフォルト: 30)
戻り値
URLをキー、検出された技術を値とする辞書を返します:
{
"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
ChromiumとPlaywrightを使用する理由は?
フルスキャナーは、Playwrightを介してChromiumでWappalyzer拡張機能を実行します。PlaywrightでのChromium拡張機能のサポートは直接的であり、geckodriverやSeleniumは必要ありません。
'fast'、'balanced'、'full'の各スキャンタイプの違いは何ですか?
- fast: URLに単一のHTTPリクエストを送信します。拡張機能は使用しません。
- balanced: .jsファイルや/robots.txtへの追加HTTPリクエストを送信し、DNSクエリを実行します。拡張機能は使用しません。
- full: 公式のWappalyzer拡張機能を使用して、ヘッドレスブラウザでURLをスキャンします。