
Panthera(P.)uncia - Subdomain Center および Exploit Observer 向けの公式 CLI ユーティリティ。
Puncia は、2つの A.R.P. Syndicate インテリジェンス API の公式コマンドラインクライアントです。ドメイン、ブランド、または脆弱性 ID を指定するだけで、ブラウザ不要で数秒以内に構造化された JSON が返されます。
$ puncia subdomain arpsyndicate.io
╭──────────────────────────────────────────────────────────────────────╮
│ Panthera(P.)uncia v0.38 │
│ subdomain recon · brand impersonation · exploit intel · sbom analysis│
│ A.R.P. Syndicate — https://www.arpsyndicate.io │
╰──────────────────────────────────────────────────────────────────────╯
[
"advisories.arpsyndicate.io",
"asm.arpsyndicate.io",
"blog.arpsyndicate.io",
...
]
$ puncia sbom bom.json ./out
puncia ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% (128/128) 0:00:41
これらの結果は時にかなり不正確で信頼できない場合がありますが、自己改善機能により、時期によって大きく異なる可能性があることにご注意ください。
API キーを使用することで、厳しいレート制限を回避できます: https://www.arpsyndicate.io/pricing.html
pip3 install punciapip3 install .pip3 install puncia
# subdomain footprint of a target (shadow IT / attack surface / takeover recon)
puncia subdomain example.com
# lookalike / typosquat / brand-impersonation domains
puncia replica example.com
# what's known about a CVE
puncia exploit CVE-2021-44228
puncia <mode> <query> [output] [--match M] [--domain D] [--limit N] [--offset N]
[--crawl] [--api-key K] [--concurrency N]
[--timeout S] [--retries N] [--quiet]
完全なリファレンスについては puncia --help を実行してください。結果は stdout に出力されます。バナー、プログレスバー、警告、エラーはすべて stderr に出力されるため、puncia subdomain example.com > out.json は常にクリーンで有効な JSON を生成します。
終了コード: 0 成功 · 1 リクエストまたは入力エラー · 2 使用法エラー。
(有料) API キーを保存 (storekey) - puncia storekey <api-key>
~/.puncia に 0600 パーミッションで保存されます。$PUNCIA_API_KEY がこれを上書きします。これは通常、CI で必要な動作です。(フリーミアム) ドメインのクエリ、ドメインごとにクラスタリング (subdomain / cuttlefish エンジン) - puncia subdomain <domain> <output-file>
subdomain/replica/keyword はすべてのページを走査してマージします。代わりに --offset (--limit の有無を問わず) を渡すと、再開可能またはストリーミングの走査のために、生の1ページを自分で正確に取得できます:
puncia subdomain bigco.com --limit 50000 --offset 0
# stderr prints: note: more results available — continue with --offset 50000
puncia subdomain bigco.com --limit 50000 --offset 50000
import asyncio
import puncia
async def main():
# Without an API key (ratelimited)
print(await puncia.query_api("exploit", "CVE-2021-3450"))
print(await puncia.query_api("subdomain", "arpsyndicate.io"))
# With an API key
await puncia.store_key("ARPS-xxxxxxxxxx")
api_key = await puncia.read_key()
print(await puncia.query_api("subdomain", "arpsyndicate.io", apikey=api_key))
print(await puncia.query_api("replica", "arpsyndicate.io", match="exact", apikey=api_key))
print(await puncia.query_api("enrich", "CVE-2021-3450", apikey=api_key))
print(await puncia.query_api("noncve", "exploitable", apikey=api_key))
# Static endpoints (unauthenticated, unlimited)
print(await puncia.query_api("subdomain", "^HEALTH"))
print(await puncia.query_api("exploit", "^STATS"))
# Live crawl, with the outcome surfaced via a callback
await puncia.query_api(
"subdomain", "bigco.com", apikey=api_key, crawl=True,
on_crawl=lambda h: print("crawl status:", h.get("X-Crawl-Status")),
)
# Write straight to disk
await puncia.query_api("subdomain", "arpsyndicate.io", "out.json", apikey=api_key)
asyncio.run(main())
失敗は puncia.PunciaError を発生させます。空の結果 ({} / []) はエラーとして扱われず、そのまま返されます。process_bulk() が行うのとまったく同じように、session= と共有の limiter= を渡すことで、多数のクエリにわたって1つのセッションを再利用できます。
from puncia import PunciaError, query_api
try:
data = await query_api("exploit", "CVE-2021-3450", apikey=api_key)
except PunciaError as exc:
print(f"lookup failed: {exc}")
git clone https://github.com/ARPSyndicate/puncia && cd puncia
pip install --upgrade pip # editable installs need pip >= 21.3
pip install -e ".[dev]"
pytest # 42 offline tests, no API calls or network access
テストスイートは完全にオフラインです。ネットワークに触れることなく、URL 構築、出力パスの封じ込め、SBOM 解析、バルク計画、レートリミッターのタイミングをカバーしているため、どの環境でも安全に実行できます。
--limit--offset--crawl は保存された結果をライブ発見パスで補完します。特定のドメインが実際に再クロールされるのは約6時間に1回だけです。そのウィンドウ内のリクエストは、キャッシュされたクロール結果を即座に取得します。Puncia は結果を stderr に報告します:
crawl: fresh, 12 newly discovered name(s) (partial / cooldown / disabled も同様)。
puncia subdomain bigco.com --crawl
(フリーミアム) レプリカドメインのクエリ、ブランドごとにクラスタリング (replica / octopus エンジン) - puncia replica <domain> --match <prefix|exact|substring> <output-file>
(フリーミアム) キーワードによるクエリ、キーワードごとにクラスタリング (keyword / ammonites エンジン) - puncia keyword <keyword> --match <exact|prefix> <output-file>
--domain を使用してキーワードを単一のドメインにスコープできます:
puncia keyword blog --domain bandcamp.comエクスプロイトおよび脆弱性識別子のクエリ (exploit)
puncia exploit ^WATCHLIST_IDES <output-file>puncia exploit ^WATCHLIST_INFO <output-file>puncia exploit ^WATCHLIST_TECH <output-file>puncia exploit ^STATS <output-file>puncia exploit ^HEALTH <output-file>puncia exploit <eoidentifier> --match <substring|prefix|exact> <output-file>(フリーミアム) CVE/GHSA 識別子のエンリッチメント (enrich) - puncia enrich <cve-id/ghsa-id> <output-file>
enrich=true は CVE-/GHSA- 識別子に対してのみ有効です。完全な上流のアドバイザリレコードを EPSS + VEDAS スコアリングとマージします。(有料) VEDAS グループ別の非 CVE 識別子 (noncve) - puncia noncve <browser/china/russia/europe/exploitable> <output-file>
(無料) Subdomain Center サービスヘルス (^HEALTH) - puncia subdomain ^HEALTH <output-file>
複数クエリ (bulk/sbom)
puncia bulk <json-file> <output-directory>
{
"subdomain": [
"domainA.com",
"domainB.com"
],
"replica": [
"domainA.com",
"domainB.com"
],
"keyword": [
"keywordA",
"keywordB"
],
"exploit": [
"eoidentifierA",
"eoidentifierB"
],
"enrich": [
"eoidentifierA",
"eoidentifierB"
]
}
puncia sbom <json-file> <output-directory>バルクおよび SBOM の実行はクエリを重複排除し、並列処理を --concurrency (デフォルト 10) に制限し、API キーが存在しない場合は、無料枠の予算内に収まるようにリクエストのペースを自動的に調整します。
(フリーミアム) 外部インポート