
مجموعة أدوات قياس DNS واستكشاف الأخطاء وإصلاحها وتدقيق الأمان
هل تساءلت يومًا إن كان مزود خدمة الإنترنت لديك يعترض حركة DNS الخاصة بك؟ هل لاحظت أي سلوك غير معتاد في استجابات DNS الخاصة بك، أو تم إعادة توجيهك إلى عنوان خاطئ وشككت في وجود خلل في DNS لديك؟ نحن نقدم مجموعة من الأدوات لإجراء تدقيقات أساسية على طلبات واستجابات DNS الخاصة بك، مما يساعدك على ضمان عمل DNS كما هو متوقع.
باستخدام dnsping، يمكنك قياس زمن استجابة أي خادم DNS لاستعلامات عشوائية.
على غرار أداة ping العادية، تقدم dnsping وظائف مماثلة لطلبات DNS، مما يساعدك
على مراقبة استجابة الخادم.
يمكنك أيضًا تتبع مسار طلب DNS الخاص بك إلى وجهته باستخدام
dnstraceroute، والتحقق من عدم إعادة توجيهه أو اعتراضه. من خلال مقارنة
استعلامات DNS المرسلة إلى نفس الخادم، يتيح لك dnstraceroute ملاحظة أي
اختلافات في المسارات المتبعة، وتنبيهك إلى المشكلات المحتملة.
يقيّم dnseval عدة محللات DNS لمساعدتك في اختيار أفضل محلل DNS
لشبكتك. بينما يُوصى باستخدام محلل DNS الخاص بك لتجنب الاعتماد على محللات DNS
التابعة لجهات خارجية، يمكن أن يساعدك dnseval في اختيار محلل DNS الأمثل عند
الحاجة. يتيح لك مقارنة خوادم DNS بناءً على الأداء (زمن الاستجابة) والموثوقية
(فقدان الحزم)، مما يمنحك رؤية شاملة لاتخاذ قرارات مستنيرة.
هناك عدة طرق لاستخدام هذه المجموعة من الأدوات، رغم أننا نوصي بتشغيلها مباشرة من الكود المصدري للحصول على أقصى قدر من المرونة والتحكم. يتطلب التشغيل من المصدر أو التثبيت عبر pip إصدار Python 3.11 أو أحدث.
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
pip3 install dnsdiag
uv هو مدير حزم Python سريع يمكنه تشغيل الأدوات مباشرة دون تثبيت:
# Run dnsping directly without installation
uvx --from dnsdiag dnsping google.com
# Run with specific options
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com
# Run dnstraceroute
uvx --from dnsdiag dnstraceroute cloudflare.com
# Run dnseval
uvx --from dnsdiag dnseval -f public-servers.txt github.com
لتثبيت dnsdiag بشكل دائم:
# Install dnsdiag tools
uv tool install dnsdiag
# Upgrade to the latest version
uv tool upgrade dnsdiag
من وقت لآخر، سيتم إصدار حزم ثنائية لأنظمة Windows وMac OS X وLinux. يمكنك الحصول على أحدث إصدار من صفحة الإصدارات.
تتوفر حزم ثنائية جاهزة لما يلي:
لا يتم دعم Windows ARM64 حاليًا بسبب تبعيات البناء التي تتطلب سلاسل أدوات ترجمة أصلية غير متوفرة بسهولة. إذا كنت تستخدم Windows على ARM، يمكنك تشغيل dnsdiag باستخدام Windows Subsystem for Linux (WSL2) أو التثبيت مباشرة من المصدر.
إذا كنت تفضل عدم تثبيت dnsdiag على جهازك المحلي، يمكنك استخدام
صورة Docker لتشغيل الأدوات في بيئة معزولة. على سبيل المثال:
docker run --network host -it --rm farrokhi/dnsdiag dnsping.py
يتيح لك dnsping "ping" محلل DNS عن طريق إرسال استعلام DNS عشوائي عدة مرات. للحصول على قائمة كاملة بخيارات سطر الأوامر المدعومة، استخدم --help. فيما يلي بعض العلامات الرئيسية:
--tcp أو --tls أو --doh أو --quic أو --http3 لاختيار بروتوكول النقل (الافتراضي هو UDP). هذه الخيارات متنافية؛ يمكن تحديد بروتوكول واحد فقط لكل أمر.--flags لعرض علامات الاستجابة، بما في ذلك علامات EDNS، لكل استجابة.--dnssec لطلب التحقق من DNSSEC، إن كان متاحًا.--nsid لعرض Name Server Identifier (NSID) إن كان متاحًا (RFC 5001).--ecs لتضمين معلومات EDNS Client Subnet لتحسين التوجيه الجغرافي.--cookie لعرض DNS cookies (RFC 7873) عند وجودها في الاستجابات../dnsping.py -c 5 --dnssec --flags --tls -t AAAA -s 8.8.8.8 brokendnssec.net
dnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
75 bytes from 8.8.8.8: seq=1 time=73.703 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=2 time=69.523 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=3 time=58.058 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=4 time=54.235 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75 bytes from 8.8.8.8: seq=5 time=57.806 ms SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
min=54.235 ms, avg=22.665 ms, max=69.523 ms, stddev=38.202 ms
يوفر dnsping أيضًا إحصاءات مثل الحد الأدنى والحد الأقصى ومتوسط
أزمنة الاستجابة، إلى جانب التذبذب (الانحراف المعياري) وفقدان الحزم.
فيما يلي بعض حالات الاستخدام المثيرة للاهتمام لـ dnsping:
--dnssec../dnsping.py -c 3 --ecs 203.0.113.0/24 -s 94.140.14.14 google.com
dnsping.py DNS: 94.140.14.14:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
66 bytes from 94.140.14.14: seq=1 time=31.407 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=2 time=29.156 ms NOERROR [ECS:203.0.113.0/24/24]
66 bytes from 94.140.14.14: seq=3 time=30.892 ms NOERROR [ECS:203.0.113.0/24/24]
--- 94.140.14.14 dnsping statistics ---
3 requests transmitted, 3 responses received, 0% lost
min=29.156 ms, avg=30.485 ms, max=31.407 ms, stddev=1.176 ms
./dnsping.py -c 2 --nsid -s 8.8.8.8 google.com
dnsping.py DNS: 8.8.8.8:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
68 bytes from 8.8.8.8: seq=1 time=36.399 ms NOERROR [NSID:gpdns-ams]
68 bytes from 8.8.8.8: seq=2 time=32.156 ms NOERROR [NSID:gpdns-ams]
--- 8.8.8.8 dnsping statistics ---
2 requests transmitted, 2 responses received, 0% lost
min=32.156 ms, avg=34.278 ms, max=36.399 ms, stddev=2.122 ms
./dnsping.py -c 2 --cookie -s anyns.pch.net quad9.net
dnsping.py DNS: anyns.pch.net:53, hostname: quad9.net, proto: UDP, class: IN, type: A, flags: [RD]
82 bytes from anyns.pch.net: seq=1 time=30.552 ms NOERROR [COOKIE:27f609c017bb2ec4ea70de5c68eec3fc39f6a53ee49c55f8]
82 bytes from anyns.pch.net: seq=2 time=24.794 ms NOERROR [COOKIE:719631dd9fcce722d3ac859b68eec3fd2e5430b5c8a7f8cf]