使用ApiCatcher在 iOS 上像修改 hosts 一样自定义域名解析

我曾在上家公司工作中被DNS域名解析问题折磨过。 当时公司项目生产环境和测试环境使用的都是同一个域名,当我们需要将APP的流量 指向测试环境时,需要修改App的域名解析。如果在电脑端,我们可以非常简单地通过修改系统 hosts 文件来搞定。 但在 iOS 移动设备上,由于系统的沙盒与安全限制,我们无法直接修改 hosts

当时我们是通过配置WIFI的DNS服务器为自定义DNS服务器解决问题。 但我们经常遇到这几个问题: 1、DNS解析有缓存,每次更改都需要清理缓存和重启APP。 2、因为缓存的存在,DNS解析有没有生效还需要根据接口响应来判断。 3、每次都要修改WIFI的DNS服务器,比较麻烦。 4、修改后还可能影响我们正常使用手机上的其它APP。

为了解决使用自定义DNS服务器遇到的这些问题,我们在 ApiCatcher 中增加了一个DNS欺骗的功能: 「DNS 映射」, 让我们可以在iOS上实现"自定义 hosts",将指定的域名重定向到自定义的 IP。

DNS 映射原理

在不能修改 iOS 系统 hosts 的情况下,ApiCatcher 是怎么做到让域名的解析结果发生改变的呢?

它的底层原理是在代理层的 TCP 建立连接阶段进行了拦截与重定向:

  1. 流量接管:当我们在 ApiCatcher 中开启抓包时,手机上的APP发起的HTTP/HTTPS请求都会经过 ApiCatcher 启动的本地代理服务器。
  2. 代理层拦截 Host :当 App 尝试与目标域名(如 echo.apicatcher.net)建立连接时,代理服务器在准备发起真实 TCP 连接的阶段,会优先检查本地的 DNS 映射规则表。
  3. 替换物理 IP 连接 :如果匹配到了我们设置的映射规则,代理服务器会绕过公网 DNS 查询,直接向我们指定的 IP 地址发起 TCP 连接
  4. 对 TLS 握手透明无感 :由于我们只是在底层的 TCP 建立物理连接阶段替换了 IP 地址,HTTP数据包中的 Host 头部和 TLS 握手时的 SNI(Server Name Indication)信息依然保持原样。因此,对于严格的 HTTPS 握手,客户端的证书校验依旧可以正常通过,对 App 客户端来说完全是无感且透明的。

怎么配置呢?

  1. 打开 ApiCatcher App,点击首页顶部的 「+」 按钮,在弹出菜单中点击 DNS映射 ,进入 「DNS 映射」 配置页面。

  2. 点击右上角的 「+」 按钮新建规则:

    • 域名 :输入需要映射的域名,支持使用通配符(例如 *.apicatcher.net 会匹配所有二级子域名)。
    • IP 地址:输入你想要指向的目标服务器或本地电脑的 IP 地址。
  3. 开启抓包即刻生效 返回首页,点击开始抓包按钮启动代理服务。此时,手机上所有匹配规则的请求都将自动导向你配置的目标 IP。 如果只是想使用DNS映射功能,不想抓包,可以配置HOST黑白名单规则。

DNS 映射规则的修改是即时生效的,只要开启了抓包。

相关推荐
IT毕设实战小研4 分钟前
电影数据可视化推荐系统
大数据·后端·爬虫·python·算法·信息可视化·课程设计
ssshooter9 分钟前
AI 时代你不能不知道的 git worktree
前端·后端·面试
观测云23 分钟前
AI时代的用户访问监测:观测云带你身临其境体验用户与前端UI交互旅程
前端·可观测性·观测云·rum
Cosolar33 分钟前
一文弄懂 Agent Harness 与 Agent Runtime 的区别
java·后端·github
喵本喵叁肆35 分钟前
06-M6-部门过滤与综合研判-从问答机到研判助手
前端·javascript·jquery
长大19881 小时前
Python代码慢?这5个性能优化技巧让速度提升100倍
后端
超超不吵吵1 小时前
Java AI转型实战(十):Agent 智能体初探
后端
TomEval1 小时前
【Web UI 自动化】05 - KDT 模式原理与实现
前端·ui·自动化
南雨北斗1 小时前
vue3项目状态持久化方案Pinia
前端
步行cgn1 小时前
@AllArgsConstructor 是 Lombok 提供的注解
后端