DNS 缓存怎么用
Windows 的 DNS 客户端服务会缓存本机近期的域名解析结果,条目在 TTL 到期后仍可能以“过期条目”形式短暂保留。导出这份缓存能得到“这台主机近期解析过哪些域名、解析到什么地址”,在端点侧补上域名访问的直证,与 DNS 服务器日志、代理日志互为依据。它反映的是解析行为而不是访问行为,缓存里有域名不等于数据真的传输成功。
基本信息
| 适用平台 | Windows 7/10/11 与 Windows Server 2008 及以上 |
|---|---|
| 查看命令 | ipconfig /displaydns(文本);Get-DnsClientCache(对象,便于筛选) |
| 关键字段 | Entry/RecordName、Type、Data、TimeToLive、Status |
| 权限要求 | 查看与导出不需要提权;ipconfig /flushdns 清缓存需要管理员权限 |
| 已知盲区 | 使用 DoH/DoT 的应用可能绕过系统解析器;部分条目会被新解析覆盖 |
典型使用场景
- 快速判断主机是否解析过来自情报的恶意域名,命中即列为下一批排查对象
- 在事件窗口内反查 C2 域名,对比解析缓存与代理日志中的实际访问
- 确认钓鱼链接的域名解析时间,与邮件到达时间、浏览器历史对齐
- 排查异常解析:内网主机解析了与本机业务无关的域名,提示存在恶意程序
- 为离线环境补证:无法取得 DNS 服务器日志时,端点缓存是唯一可用的域名线索
导出与筛查
导出与筛查
# 立即导出原始文本留档(越早越好,缓存会被覆盖)
ipconfig /displaydns > C:\case\dns-cache.txt
# 结构化导出,便于按域名与 TTL 排序
Get-DnsClientCache | Select-Object Entry, RecordName, Type, Data, TimeToLive |
Sort-Object RecordName | Out-File C:\case\dns-cache-objects.txt
# 按可疑关键字筛查(示例:非常见顶级域或已知情报域名)
Get-DnsClientCache | Where-Object { $_.Entry -match 'example-bad\.' } | Format-Table -AutoSize输出逐列读法
| 列 | 含义 | 正常/异常 |
|---|---|---|
| Entry | 被解析的域名 | 出现与业务无关的随机串域名即为疑点 |
| Type | 记录类型 | A/AAAA 常见;TXT 大量出现需关注隧道类行为 |
| Data | 解析结果地址 | 指向云主机或陌生网段时结合归属核查 |
| TimeToLive | 剩余生存时间 | 越接近 0 说明解析发生得越早,可粗估时间排序 |
| Status | 解析状态 | Success 表示正常返回;其他状态说明查询未成功 |
采集期间不要执行 ipconfig /flushdns:清缓存会直接销毁证据。同样避免重启或让主机长时间无人看管,缓存条目会被新解析替换。
缓存条目存在过期但未清理的情况,TimeToLive 为负值或 0 时只能说明“曾解析过”,不能用来精确推断访问时间,时间判断要交给 DNS 服务器日志或代理日志。