
سكربت PowerShell يراقب حركة DNS في Windows عبر pktmon للكشف عن التسميم والانتحال واستجابات خادم الحلول المارق وتغييرات MAC للبوابة، مع تسجيل التنبيهات.
سكربت PowerShell أحادي الملف يراقب حركة الشبكة الخاصة بجهاز Windows نفسه بحثًا عن علامات تسميم / انتحال DNS، باستخدام pktmon — أداة التقاط الحزم المدمجة في Windows 10 (1809+)، وWindows 11، وWindows Server 2019+. لا حاجة لأي أداة التقاط خارجية (Wireshark، Npcap، tcpdump).
يلتقط حركة DNS (منفذ UDP/TCP 53) عند مكدس الشبكة في نظام التشغيل، مما يغطي حركة LAN وWAN معًا على جهاز نموذجي، ثم يحلل الحزم الخام بنفسه — صيغة pcapng الثنائية، وترويسات Ethernet/IP/UDP/TCP، وصيغة رسائل DNS، بما في ذلك مؤشرات ضغط الأسماء — بالكامل عبر PowerShell الأصلي.
توجد نسخة مرافقة بـ bash/tcpdump تغطي macOS وLinux.
| الإشارة | لماذا تهم |
|---|---|
| إجابات متعارضة لنفس استعلام DNS | البصمة النموذجية لمحاولة تسميم: يبادر المهاجم بإرسال إجابة مزيفة بالتزامن مع الإجابة الحقيقية، آملًا أن تصل المزيفة أولًا وتُخزَّن مؤقتًا. |
| ردود من خادم DNS لم تقم بتهيئته قط | تُقارن مع Get-DnsClientServerAddress. قد يشير الرد من خادم غير معروف إلى مهاجم خارج المسار يحقن إجابات. |
| ردود بلا استعلام معلّق مطابق | إجابة على سؤال لم يرصد المراقب طرحه قط — علامة محتملة على حركة محقونة/منتحلة (مع فترة سماح عند البدء لتجنب الإنذارات الكاذبة). |
| تغيّر عنوان MAC للبوابة الافتراضية أثناء الجلسة | يُستطلع عبر Get-NetNeighbor في كل دورة التقاط. انتحال ARP هو عادةً الخطوة الأولى التي يتخذها المهاجمون لتثبيت موقعهم لتلاعب DNS على LAN. |
كل تنبيه يطبع جزأين:
[TECHNICAL] — تفاصيل الحزمة الخام، لمن يرغب في التحقيق أكثر[WHAT THIS MEANS] — شرح بلغة مبسطة لسبب أهميتهكما تُكتب كل المخرجات إلى ملف سجل بطابع زمني.
pktmon.exe (مدمج في كل هذه الإصدارات)pktmon pcapng (المستخدم لتحويل عمليات الالتقاط للتحليل) بعد الإصدار الأولي 1809؛ إذا كان مفقودًا، فحدّث Windowsgit clone https://github.com/microlaser/dns-watchdog.git
cd dns-watchdog\windows
لا توجد وحدات أو تبعيات خارجية للتثبيت — فقط السكربت نفسه.
من PowerShell مرفوع الصلاحيات (Administrator):
.\dns_watchdog.ps1
افتراضيًا يكتشف السكربت تلقائيًا البوابة الافتراضية وخوادم DNS المهيأة، ويلتقط عبر جميع محولات الشبكة (يعمل pktmon عند مكدس الشبكة في نظام التشغيل، لذا يغطي طبيعيًا حركة LAN وWAN معًا دون اختيار محول محدد). أوقف المراقبة بـ Ctrl+C؛ تُطبع ملخص الجلسة عند الخروج.
.\dns_watchdog.ps1 [-LogFile <path>] [-CaptureIntervalSeconds <n>] [-GraceResponses <n>] [-KeepCaptures]
| المعامل | الوصف |
|---|---|
-LogFile | مسار سجل الجلسة (الافتراضي: .\dns_watchdog_<timestamp>.log) |
-CaptureIntervalSeconds | طول كل نافذة التقاط قبل تحويلها وتحليلها. أقل = زمن اكتشاف أقل، وحمل أكبر. الافتراضي: 5 |
-GraceResponses | عدد الردود التي تُلاحظ قبل تفعيل تنبيهات "لا استعلام مطابق"، لتجنب ضوضاء البدء. الافتراضي: 10 |
-KeepCaptures | الاحتفاظ بملفات .etl/.pcapng لكل نافذة على القرص بدلًا من حذفها بعد التحليل |
=========================================================================
DNS Watchdog (Windows) - DNS poisoning / spoofing monitor
=========================================================================
Capturing on: all network adapters (pktmon captures at the OS networking stack,
which covers this host's LAN and WAN traffic together)
Default gateway: 192.168.1.1 (MAC baseline: 60-95-F8-2B-5E-78)
Configured DNS: 192.168.0.1, 192.168.1.1
Log file: .\dns_watchdog_20260918_204725.log
...
[20:47:44.872] [ALERT] Conflicting DNS responses for the same query
[TECHNICAL] txn=64878 query=example.com (type 28) first_response=[AAAA:2607:f8b0:...] conflicting_response(src=10.0.0.9)=[AAAA:dead:beef::1]
[WHAT THIS MEANS] This machine's DNS question got two DIFFERENT answers back. Legitimate DNS servers don't normally do this. This is the textbook signature of a DNS poisoning attempt, where an attacker races a forged answer against the real one, hoping the forged one arrives first and gets cached.
لا يوجد في Windows ما يعادل مباشرة تمرير tcpdump إلى محلل نصي — فمخرجات وحدة تحكم pktmon الحية هي بايتات خام، وليست أسطرًا مفكوكة. لذا يقوم هذا السكربت بدلًا من ذلك بما يلي:
pktmon في نوافذ قصيرة متعاقبة (5 ثوانٍ افتراضيًا)، مع الالتقاط إلى .etl.pcapng (pktmon pcapng)ملاحظة جديرة بالمعرفة: غالبًا ما يلتقط Windows الحزم المولّدة محليًا (الصادرة) قبل إضافة ترويسة Ethernet عند بعض نقاط التفتيش في المكدس، لذا قد تصل استعلامات DNS الصادرة كحزم IP مجردة بلا أي تأطير لطبقة الربط، بينما تصل الردود الواردة مؤطرة بالكامل بـ Ethernet من السلك. يكتشف المحلل الحالتين ويتعامل معهما. كما يميل pktmon إلى الإبلاغ عن نفس الحزمة الفيزيائية أكثر من مرة (تُلتقط عند نقاط متعددة في مكدس الشبكة)؛ يزيل السكربت التكرارات المتطابقة بايتًا ببايت داخل كل نافذة التقاط حتى لا يُنبَّه على حزمة حقيقية واحدة عدة مرات — أما الرد المتعارض/المسموم فعليًا فمحتواه مختلف، لذا لا يتأثر أبدًا بهذه إزالة التكرار.
pktmon pcapng إصدار Windows حديثًا نسبيًا؛ قد تحتاج الأنظمة القديمة جدًا من حقبة 1809 إلى الرجوع إلى pktmon etl2txt بدلًا منه (غير مُنفَّذ هنا).MIT (أو حدّثه ليطابق تفضيلاتك).