Charles设置了DNS Spoofing后域名还是被解析到外网IP怎么办?

远香 阅读 62

用Charles抓小程序网络请求时,想通过DNS Spoofing把api.example.com指向本地调试接口。按教程配置了Hosts映射规则并启用DNS Spoofing,手机也连了代理,但访问时抓包显示域名还是解析到外网IP。重启过Charles和手机都没用,哪里出问题了?

配置截图里规则是这样的:


{
  "host": "api.example.com",
  "ip": "192.168.1.100",
  "protocol": "http"
}

手机DNS设置确实指向本机地址,但访问接口时还是被302跳转到真实服务器。难道需要额外配置SSL证书?

我来解答 赞 8 收藏
二维码
手机扫码查看
2 条解答
设计师夏沫
你这个情况很典型,DNS Spoofing没生效基本是下面几个原因中的一个。

首先确认你是不是只在Charles里配了Hosts但没开DNS spoofing开关。光有映射规则不行,必须在Proxy -> DNS Spoofing Settings里勾上Enable DNS Spoofing,不然那条规则根本不生效。

然后看手机端的网络设置。虽然你说DNS指向了本机,但iOS和安卓有些版本会强制走运营商DNS,特别是HTTPS请求。建议把手机Wi-Fi配置里的DNS手动改成你的电脑IP,别靠代理自动生效。

再就是缓存问题。手机、系统甚至App本身都可能缓存了之前的DNS结果。试试用浏览器访问一下api.example.com,看是不是也指向外网IP。如果还是旧地址,说明本地解析没拦住,这时候可以用nslookup或者dig命令打一下看看实际解析结果。

还有个坑是SSL代理没配好。如果你抓的是HTTPS接口,光改DNS没用,还得确保Charles的SSL Proxying规则加了api.example.com,并且手机装了Charles根证书。很多小程序请求都是HTTPS的,302跳转大概率是因为TLS握手失败,触发了备胎逻辑。

最后检查下spoofing规则格式。你贴的那个json结构看起来像是自己写的配置,但Charles其实不认这种写法。你应该是在Tools -> DNS Spoofing里点Add Rule,host填api.example.com,ip填192.168.1.100,状态要enable。

顺序理一遍:开DNS spoofing → 加正确规则 → 手机设DNS和代理 → 装证书 → 开SSL proxying → 清缓存重试。一般这样就能打住了。报错信息如果有certificate或者connection reset之类的,基本就是证书问题。
点赞 5
2026-02-11 13:00
小慧芳
小慧芳 Lv1
问题出在小程序可能用了HTTPS,而你的Charles只配置了HTTP。直接这样:

1. 把规则里的protocol改成https
2. 确保手机安装了Charles的SSL证书并信任。

{
"host": "api.example.com",
"ip": "192.168.1.100",
"protocol": "https"
}


如果还有302跳转,检查下接口是否强制重定向到外网地址。
点赞 10
2026-01-30 11:00