使用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 映射规则的修改是即时生效的,只要开启了抓包。

相关推荐
炫酷的大高个32 分钟前
6 亿播放的闪身步,我用前端算出 15 倍重心差
前端·javascript
用户3600555790036 分钟前
Kestrel_VLLM - 34 · 批量 M 行:五个块、两种层型,与「退回去」的两个原语
后端
不可能片场39 分钟前
内容运营自动化 配图折行别把词切两半
前端·electron
leo在掘金42 分钟前
25.5k Star 的 DeepInfer 怎么扛住3万亿参数
后端·架构
Lank_M1 小时前
HEIC转JPG统一转sRGB,P3高饱和色就回不来了
前端
补码缩写1 小时前
sharp默认转JPG颜色没错,ICC和EXIF却全没了
前端
Agent世界1 小时前
cookie 判据会撒谎:CDP 登录态保活的五个实测坑
后端·自动化运维
用户7783366132111 小时前
SerpBase AI Overview 引用卡片:React 组件实战
前端
林小帅1 小时前
【笔记】Prisma v7 + SQLite TS2305 及连锁 TS7006 问题
前端·javascript·后端
王中阳Go1 小时前
你那条三跳链路的单跳超时,是按压测的 p95 定的,还是拍出来的?
人工智能·后端·架构