
Panthera(P.)uncia - أداة CLI الرسمية لـ Subdomain Center و Exploit Observer.
Puncia هو عميل سطر الأوامر الرسمي لواجهتي برمجة استخبارات A.R.P. Syndicate — وجّهه نحو نطاق أو علامة تجارية أو معرّف ثغرة واحصل على 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) لجلب صفحة خام واحدة
بنفسك بدلاً من ذلك، مثلاً لتنقّل قابل للاستئناف أو متدفّق:
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؛ وتُعاد النتيجة الفارغة ({} / [])
كما هي بدلاً من معاملتها كخطأ. أعد استخدام جلسة واحدة عبر استعلامات عديدة
بتمرير session= و limiter= مشترك، تمامًا كما
يفعل process_bulk().
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، وتخطيط bulk، وتوقيت محدّد المعدّل دون لمس الشبكة، لذا من الآمن تشغيلها في أي بيئة.
--limit--offset--crawl النتائج المخزّنة
بجولة اكتشاف مباشرة. لا يُعاد زحف نطاق معيّن فعليًا إلا مرة كل ~6 ساعات —
وتحصل الطلبات داخل تلك النافذة على نتيجة الزحف المخزّنة مؤقتًا فورًا.
ويُبلّغ 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.(مدفوع) المعرّفات غير الخاصة بـ CVE حسب مجموعة VEDAS (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>تُزيل عمليات bulk و SBOM تكرار الاستعلامات، وتحدّ التوازي عند --concurrency
(الافتراضي 10)، وعند غياب مفتاح API — تُنظّم وتيرة الطلبات لتبقى داخل
ميزانية الطبقة المجانية تلقائيًا.
(مجاني جزئيًا) الاستيراد الخارجي