标题: Windows中监控进程的DNS查询 创建: 2026-05-21 20:11 更新: 2026-05-29 10:06 链接: https://scz.617.cn/windows/202605212011.txt https://mp.weixin.qq.com/s/L4m5Xc4EA8z1RLTqpbdtBQ 自从Windows有了DNS Client Service (Dnscache),进程发起DNS查询时,就与此服 务深度耦合。进程试图进行FQDN解析时,底层API实际向Dnscache服务发起RPC请求。 先在Cache里找,无命中时再由Dnscache进行socket通信,FQDN解析结果经RPC响应返 回给原进程,同时存入Cache。下次再碰上同一FQDN,就用Cache响应,不再触发53/ UDP通信。 Win7可停用Dnscache,此时进程试图解析FQDN时由本进程发送53/UDP报文。Win10及 之后版本,无法停用Dnscache,必须走RPC这一套流程,意味着Win10无法用wf.msc阻 断指定进程的DNS查询。 且不说阻断,我们有时需要知道指定进程可能发起哪些DNS查询,有时想用hosts文件 对之劫持,比如解析到127.0.0.1。在逆向工程领域,这是常见需求。用Wireshark捕 捉53/UDP报文,只能看到待解析的FQDN,不能精确对应到发起进程。虽然可从时间上 推断,但不够精准。再就是Cache命中时,没有53/UDP通信,Wireshark抓不到DNS报 文,这种情况观察者不会知道曾经发起过哪些DNS查询。 ipconfig有两个与Dnscache相关的参数 /flushdns Purges the DNS Resolver cache. /displaydns Display the contents of the DNS Resolver Cache. 一个清空DNS缓存,另一个显示DNS缓存,其中并无PID信息,可从时间上推断,比如 先清空、再触发。 原始需求可用Event Tracing for Windows(ETW)日志满足。ETW日志自带PID信息,无 需根据时间推断DNS查询的发起进程。 Windows自带工具logman、tracerpt、eventvwr.msc、wevtutil常用于查看ETW日志, 但操作并不便捷。也可用PowerShell查看ETW日志,可借助AI生成具体命令。自带工 具胜在普适。 https://github.com/asgarciap/etw-dns github上有个etw-dns,可在控制台实时输出日志,同时在当前目录生成相关日志文 件,从中可看到哪个进程(PID)在解析哪个FQDN。没有GUI,但操作比eventvwr.msc简 便。 https://www.nirsoft.net/utils/dns_lookup_view.html 前段时间无意中发现,nirsoft出品过DNSLookupView,一款GUI的DNS ETW工具,完美 解决原始需求。除了使用便捷,它有个其他技术方案所不具备的优势,会实时将PID 转换成进程名,对于那些很快消失的进程,这点很有用,比如ping。即便如此,某些 转瞬即逝的进程名,仍留不下来,只有PID。 简单说几个DNSLookupView操作细节。 -------------------------------------------------------------------------- File Start DNS Tracing (F5) Stop DNS Tracing (F6) Clear All (Ctrl-X) View Sort By Time Choose Columns 根据个人喜好挑选被显示的列,调整各字段的顺序 Options Select Another Font 宋体 12 Advanced Options 域名黑、白名单,支持通配符 -------------------------------------------------------------------------- nirsoft另有不少Windows实用工具,下面这些值得一试。 -------------------------------------------------------------------------- DNSQuerySniffer https://www.nirsoft.net/utils/dns_query_sniffer.html SmartSniff https://www.nirsoft.net/utils/index.html DeviceIOView https://www.nirsoft.net/utils/device_io_view.html SimpleProgramDebugger https://www.nirsoft.net/utils/simple_program_debugger.html FileActivityWatch https://www.nirsoft.net/utils/file_activity_watch.html USBDriveLog https://www.nirsoft.net/utils/usb_drive_log.html -------------------------------------------------------------------------- DNSQuerySniffer,相当于只抓53/UDP的Wireshark,不满足原始需求。 SmartSniff地位类似Wireshark,但高度简化,不做协议解码,会显示报文的关联进 程。 FileActivityWatch地位类似Process Monitor,只聚焦文件操作。 USBDriveLog参看 《MSDN系列(50)--Win10中的USB日志》 https://scz.617.cn/windows/202308241409.txt