مرجع المطورين
عامل اكتشاف النطاقات الفرعية
باستخدام DomScan API، لا. هذه تغطية سلبية على قدر ما تتيحه المصادر. لن تظهر الأسماء الداخلية ولا المضيفون العامون الغائبون عن مجموعات بيانات المصادر، كما أن التحقق عبر DNS لا يبحث عن أسماء إضافية.
عامل اكتشاف النطاقات الفرعية
لا. هذه تغطية سلبية على قدر ما تتيحه المصادر. لن تظهر الأسماء الداخلية ولا المضيفون العامون الغائبون عن مجموعات بيانات المصادر، كما أن التحقق عبر DNS لا يبحث عن أسماء إضافية.
استخدم GET /v1/subdomains?domain=example.com&sources=ct. تختار القيمة ct مسار التوافق، بينما يعرض كل إدخال مصدر دليله الفعلي. تُرجع الطلبات المقيدة بالتخزين المؤقت 202 عند عدم وجود نتيجة، وتُرجع الواجهة 503 عند فشل كل المصادر. تُرد الأرصدة في الحالتين.
GET
/v1/subdomains
معاملات الاستعلام
| المعامل | النوع | Description |
|---|---|---|
| domain مطلوب | string | النطاق الجذري للعثور على النطاقات الفرعية (مثال: "github.com") |
| prefer_cache اختياري | boolean token | إرجاع النتائج المخزنة مؤقتًا فقط. إذا لم توجد بيانات حديثة أو قديمة في التخزين المؤقت، تُرجع الواجهة 202 وتضع تحديثًا في الخلفية في قائمة الانتظار وترد أرصدة الطلب. القيم المقبولة: true وfalse و1 و0 وyes وno. القيمة الافتراضية: false. |
| sources اختياري | string | محدد للتوافق. لا تُقبل إلا القيمة ct. تبدأ هذه القيمة مسار الاكتشاف السلبي، لكن كل نتيجة تعرض مزود الدليل: crtsh أو crtname أو hackertarget أو threatminer أو wayback أو certspotter. قد تعرض نتائج التخزين المؤقت القديمة القيمة ct. |
| verify اختياري | boolean token | يفحص DNS للأسماء المختارة مسبقًا للاستجابة فقط. لا يكتشف التحقق أسماء إضافية. القيم المقبولة: true وfalse و1 و0 وyes وno. القيمة الافتراضية: false. |
| include_wildcards اختياري | boolean token | يُرجع أدلة شهادات أحرف البدل في مصفوفة wildcards منفصلة. لا تختلط أحرف البدل بنتائج أسماء المضيفين المحددة. القيم المقبولة: true وfalse و1 و0 وyes وno. القيمة الافتراضية: false. |
| limit اختياري | integer | الحد الأقصى لسجلات أسماء المضيفين المحددة التي ستُرجع. أدخل عددًا صحيحًا من 1 إلى 2000. القيمة الافتراضية: 500. |
حالات الاستخدام
- رسم سطح الهجوم وتدقيقات الأمان
- راجع أسماء المضيفين التي قد تكون منسية أو تابعة لتقنية معلومات الظل
- التدقيق التقني قبل الاستحواذ
- تحليل البنية التحتية التنافسي
- استطلاع مكافآت الأخطاء
حقول الرد
| الحقل | Description |
|---|---|
subdomains[].name | اسم المضيف المُرجع. قد يظهر النطاق الأساسي إذا كان المصدر يتضمنه. |
subdomains[].source | راجع أدلة أسماء المضيفين العامة مع توضيح مصدر كل دليل |
subdomains[].first_seen | تعرض الإدخالات المدعومة ببيانات CT أقدم قيمة not-before عُثر عليها في الشهادات. وقد تُرجع إدخالات المصادر السلبية البديلة null. |
subdomains[].verified | تكون القيمة true فقط عند تفعيل verify ونجاح حل DNS لاسم المضيف المُرجع. وتكون false في غير ذلك. |
subdomains[].dns_records | سجلات A وCNAME الناتجة عن التحقق الاختياري من اسم المضيف المُرجع، أو null. لا يضيف هذا الحقل أسماء إلى النتيجة. |
summary.total_found | إجمالي سجلات أسماء المضيفين المحددة التي عُثر عليها قبل تطبيق حد الاستجابة، بما فيها النطاق الأساسي إذا تضمنه المصدر. |
summary.verified_count | عدد أسماء المضيفين المُرجعة التي نجح حلها أثناء التحقق الاختياري عبر DNS. |
رموز حالة HTTP
| رموز حالة HTTP | Description |
|---|---|
200 OK | نجح الطلب |
202 مقبول | تم قبول عدم العثور على نتيجة مخزنة مؤقتًا للنطاقات الفرعية في وضع التخزين المؤقت فقط لتحديثها في الخلفية. لا تُخصم أي أرصدة؛ أعد المحاولة بعد مدة Retry-After. |
400 طلب غير صالح | معلمات غير صالحة |
402 الدفع مطلوب | لا توجد أرصدة كافية لتنفيذ هذا الطلب. |
503 الخدمة غير متاحة | الخدمة الخلفية غير متاحة أو تفرض تحديد معدل مؤقتًا. |
504 انتهت مهلة البوابة | انتهت مهلة الطلب إلى الخدمة الخلفية. |
طلب مثال
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/subdomains?domain=example.com&sources=ct&include_wildcards=yes&limit=100"
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/subdomains?domain=example.com&sources=ct&verify=yes&limit=50"
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/subdomains?domain=example.com&prefer_cache=1"
import requests
domscan = requests.Session()
domscan.headers.update({"X-API-Key": "your-api-key"})
response = domscan.get(
"https://domscan.net/v1/subdomains",
params={
"domain": "example.com",
"sources": "ct",
"verify": "yes",
"include_wildcards": "yes",
"limit": 100
}
)
data = response.json()
print(f"Returned {data['summary']['returned']} hostname entries")
print(f"Verified: {data['summary']['verified_count']}")
live_subs = [s for s in data['subdomains'] if s['verified']]
for sub in live_subs[:10]:
print(f" {sub['name']}")
const domscanFetch = (url, options = {}) =>
fetch(url, {
...options,
headers: { ...options.headers, "X-API-Key": "your-api-key" },
});
const response = await domscanFetch(
'https://domscan.net/v1/subdomains?' + new URLSearchParams({
domain: 'example.com',
sources: 'ct',
verify: 'yes',
include_wildcards: 'yes',
limit: '100'
})
);
const data = await response.json();
console.log(`Returned ${data.summary.returned} hostname entries`);
console.log(`Verified: ${data.summary.verified_count}`);
data.subdomains
.filter(s => s.verified)
.forEach(s => console.log(` ${s.name}`));
مثال الرد
{
"domain": "example.com",
"subdomains": [
{
"name": "api.example.com",
"source": "crtsh",
"first_seen": "2025-01-15T00:00:00Z",
"verified": true,
"dns_records": {
"A": ["192.0.2.10"],
"CNAME": null
}
}
],
"wildcards": [
{
"pattern": "*.example.com",
"source": "crtsh",
"first_seen": "2024-11-20T00:00:00Z"
}
],
"summary": {
"total_found": 1,
"returned": 1,
"verified_count": 1,
"unverified_count": 0,
"sources_used": ["crtsh"],
"apex_included": false,
"wildcard_suppressed_count": 1,
"wildcard_returned_count": 1
},
"intelligence_summary": {
"data_sources": ["crtsh"],
"source_count": 1,
"cache_status": "live",
"returned_count": 1,
"total_found": 1,
"truncated": false,
"limit": 100,
"verification_requested": true,
"include_wildcards": true,
"verified_count": 1,
"verified_ratio": 1,
"live_dns_record_count": 1,
"apex_included": false,
"wildcard_suppressed_count": 1,
"wildcard_returned_count": 1,
"first_seen_oldest": "2025-01-15T00:00:00Z",
"first_seen_newest": "2025-01-15T00:00:00Z",
"warning_count": 0
},
"meta": {
"query_time_ms": 184,
"cached": false
}
}
202 مقبول
{
"status": "pending",
"code": "CACHE_MISS_REFRESH_QUEUED",
"message": "Try again in a moment",
"domain": "example.com",
"retry_after": 30,
"credits_charged": 0,
"billing_status": "not_charged",
"request_id": "m8abc12-x9y8"
}
POST
/v1/subdomains/bulk
معاملات الجسم
| المعامل | النوع | مطلوب |
|---|---|---|
| domains | string[] | مطلوب |
| verify |
boolean
الافتراضي
false
|
اختياري |
| include_wildcards |
boolean
الافتراضي
false
|
اختياري |
| limit |
integer
الافتراضي
500
|
اختياري |
حقول الرد
| الحقل | النوع |
|---|---|
results[] |
unknown[] |
meta |
object |
meta.total |
integer |
meta.succeeded |
integer |
meta.failed |
integer |
meta.max_items |
integer |
meta.credits_per_item |
integer |
meta.duration_ms |
integer |
طلب مثال
curl -X POST "https://domscan.net/v1/subdomains/bulk" \
-H "Content-Type: application/json" \
-H "X-API-Key: $DOMSCAN_API_KEY" \
-d '{
"domains": [
"example.com",
"cloudflare.com"
],
"verify": false,
"limit": 500
}'
مثال الرد
{
"results": [
null
],
"meta": {
"total": 1,
"succeeded": 1,
"failed": 1,
"max_items": 10,
"credits_per_item": 1,
"duration_ms": 1
}
}