عن المشروع

Domain Check هو أداة موثوقة للتحقق من توفر النطاقات تقوم بالاستعلام مباشرة من خوادم RDAP التابعة للسجلات، حيث يمثل RDAP البديل الذي فرضته ICANN لبروتوكول WHOIS. يوضح ملف README المقارنة بينهما: يستخدم RDAP بروتوكول HTTPS مع JSON مهيكل، بينما يستخدم WHOIS منفذ TCP 43 بنص بسيط، ويفتقر لدعم .dev و .app، ويعيد نصوصاً خاصة بكل سجل يصعب تحليلها. ويشير المشروع إلى أن اختباراته أظهرت أن whois أبلغ عن نطاق مسجل على أنه متاح، بينما كان RDAP دقيقاً في جميع حالات الاختبار، مع إرفاق وثيقة بحثية حول مقارنة الدقة. الواجهات: يوفر المشروع ثلاث طرق للاستعلام؛ واجهة ويب توفر نموذجاً لا يتطلب تسجيلاً، وREST API تحت المسار /api/v1/ يدعم فحص النطاقات الفردية، وفحص متعدد الـ TLDs عبر معامل tlds مفصول بفواصل، ونقطة نهاية POST للفحص الجماعي تستقبل حتى 50 نطاقاً بحد أقصى لحجم الجسم 64 كيلوبايت، ونقطة نهاية للحالة الصحية. تكون استجابات API بتنسيق JSON وتتضمن النطاق، التوفر، TLD، طابع وقت الفحص، مصدر البيانات، حالة التخزين المؤقت والمدة؛ وبالنسبة للنطاقات المسجلة، تتضمن أيضاً المسجل، وتواريخ الإنشاء والانتهاء، وخوادم الأسماء وأكواد الحالة. كما يوفر CLI أوامر فرعية للفحص الفردي والجماعي، وفحص متعدد الـ TLDs، ومخرجات بتنسيق JSON أو CSV، ومؤشر تقدم للعمليات الجماعية، وتزامن قابل للتكوين، وأكواد خروج موثقة: 0 عندما تكون جميع النطاقات متاحة، 1 عندما يكون نطاق واحد على الأقل مأخوذاً، و 2 عند حدوث خطأ. مراقبة النطاقات (Domain Watch): ميزة اختيارية يتم تفعيلها عبر علم enable-watch، تقوم بفحص النطاقات المراقبة وإرسال Webhook عند تحول النطاق من مسجل إلى متاح. يعيد تسجيل المراقبة معرفاً (id)، ورابط Webhook، وسراً من نوع HMAC؛ وتتضمن الإرسالات ترويسة X-DomainCheck-Signature تحتوي على توقيع مسبوق بـ sha256 يتحقق منه المستقبل باستخدام السر. المراقبات تعمل لمرة واحدة، وتنتهي بعد 90 يوماً، ومحدودة بـ 10 مراقبات لكل IP كل 24 ساعة مع فاصل فحص افتراضي 15 دقيقة، وتتضمن حماية من SSRF، وحظر عناوين IP الخاصة، ومنع إعادة ربط DNS. يتم تخزين النطاق ورابط Webhook فقط. يتم فرض حدود لمعدل الطلبات لكل IP: 10 طلبات في الدقيقة لواجهة الويب، 60 لـ API الفحص الفردي، و 5 للفحص الجماعي، وتعيد الطلبات المتجاوزة للحد رمز 429 مع ترويسة Retry-After. الاستضافة الذاتية والتكوين: Domain Check عبارة عن ملف Go binary واحد بدون تبعيات وقت التشغيل، أو صورة Docker؛ ويتطلب البناء من المصدر Go 1.26 أو أحدث. القوالب والأصول الثابتة مدمجة في الملف الثنائي. يمكن تقديم الإعدادات كأعلام (flags)، أو متغيرات بيئة DOMCHECK_، أو ملف تكوين YAML، مع أولوية للأعلام ثم متغيرات البيئة ثم ملف التكوين ثم الإعدادات الافتراضية. تغطي المعلمات الموثقة عنوان الاستماع، حجم ذاكرة التخزين المؤقت LRU، وفترات TTL منفصلة للنتائج المتاحة والمسجلة، وفاصل تحديث IANA RDAP bootstrap، ومعالجة trust-proxy لـ X-Forwarded-For، وأصول CORS، ونقطة نهاية لمقاييس Prometheus، وتنسيق ومستوى السجلات، ومسار قاعدة بيانات المراقبة، وفاصل الفحص، وأقصى TTL، وحد المراقبة لكل IP. تتوفر أمثلة للوكيل العكسي (Reverse proxy) لـ Caddy و nginx. البنية: يتم تنظيم الكود في نقطة دخول للأوامر بالإضافة إلى حزم داخلية لمحرك الفحص (عميل RDAP، بديل WHOIS، مرشح DNS المسبق، محمل IANA bootstrap، ذاكرة LRU، حارس SSRF، وتحديد معدل الطلبات لكل سجل)، وتكوين طبقي، والتحقق من صحة النطاق مع تحويل IDN إلى punycode واستخراج TLD عبر publicsuffix، وخادم HTTP والمعالجات، وCLI. يصف ملف README تدفق الطلب كالتالي: التحقق من الصحة، البحث في التخزين المؤقت، مرشح DNS المسبق لاستبعاد الأسماء المسجلة بوضوح، تحديد معدل الطلبات لكل سجل، استعلام RDAP، التحليل، التخزين المؤقت، واستجابة JSON. فترات TTL الافتراضية للتخزين المؤقت هي 5 دقائق للنتائج المتاحة، وساعة واحدة للمسجلة، و 30 ثانية للأخطاء. الأمان والصيانة: يدرج ملف README حماية SSRF، وترويسات الأمان (CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy)، ومستخدم Docker غير جذر (non-root)، وعدم وجود تتبع أو تحليلات أو ملفات تعريف ارتباط أو احتفاظ بالبيانات. يستخدم التطوير go test، واختبار fuzz، و golangci-lint، ويشير المستودع إلى إعدادات صارمة للتنظيف التلقائي لـ git. المشروع مرخص بموجب MIT وهو عبارة عن مرآة (mirror) للقراءة فقط على GitHub لنسخة git مستضافة ذاتياً.