
PowerShell स्क्रिप्ट जो pktmon के माध्यम से Windows DNS ट्रैफ़िक की निगरानी करती है ताकि poisoning, spoofing, rogue resolver प्रतिक्रियाओं और gateway MAC परिवर्तनों का पता लगाया जा सके, तथा अलर्ट लॉग किए जा सकें।
एक सिंगल-फ़ाइल PowerShell स्क्रिप्ट जो Windows मशीन के अपने नेटवर्क ट्रैफ़िक में DNS पॉइज़निंग / स्पूफ़िंग के संकेतों की निगरानी करती है, pktmon का उपयोग करते हुए — जो Windows 10 (1809+), Windows 11, और Windows Server 2019+ में अंतर्निहित पैकेट-कैप्चर टूल है। किसी तृतीय-पक्ष कैप्चर टूल (Wireshark, Npcap, tcpdump) की आवश्यकता नहीं है।
यह OS नेटवर्किंग स्टैक पर 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 स्पूफ़िंग आमतौर पर हमलावरों द्वारा LAN-पर DNS छेड़छाड़ के लिए खुद को तैनात करने का पहला कदम होता है। |
प्रत्येक अलर्ट दो भागों में प्रिंट होता है:
[TECHNICAL] — कच्चा पैकेट विवरण, आगे जाँच करने वाले किसी भी व्यक्ति के लिए[WHAT THIS MEANS] — सरल भाषा में व्याख्या कि यह क्यों मायने रखता हैसभी आउटपुट एक टाइमस्टैम्प वाली लॉग फ़ाइल में भी लिखे जाते हैं।
pktmon.exe उपलब्ध हो (इन सभी में इन-बॉक्स)pktmon pcapng (विश्लेषण के लिए कैप्चर को कन्वर्ट करने हेतु उपयोग किया जाता है) प्रारंभिक 1809 रिलीज़ के बाद जोड़ा गया था; यदि यह अनुपस्थित है, तो Windows अपडेट करेंgit clone https://github.com/microlaser/dns-watchdog.git
cd dns-watchdog\windows
इंस्टॉल करने के लिए कोई मॉड्यूल या बाहरी निर्भरता नहीं — बस स्क्रिप्ट स्वयं।
एक एलिवेटेड (Administrator) PowerShell से:
.\dns_watchdog.ps1
डिफ़ॉल्ट रूप से स्क्रिप्ट आपके डिफ़ॉल्ट गेटवे और कॉन्फ़िगर किए गए DNS सर्वरों का स्वतः पता लगाती है, और सभी नेटवर्क अडैप्टरों पर कैप्चर करती है (pktmon OS नेटवर्किंग स्टैक पर काम करता है, इसलिए यह स्वाभाविक रूप से किसी विशिष्ट अडैप्टर को चुने बिना 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 (या अपनी पसंद के अनुसार अपडेट करें)।