利用 Redsocks 解决透明代理的远程抓包问题

利用 Redsocks 解决透明代理的远程抓包问题

💡 原文中文,约4400字,阅读约需11分钟。
📝

内容提要

本文探讨了如何通过Redsocks解决远程设备的透明代理抓包问题。通过在云手机上安装本地抓包工具的证书,并利用内网穿透技术,将流量导入本地抓包工具。文章分析了正向代理与透明代理的区别,指出HTTPS流量抓取的挑战,并提出结合Redsocks实现透明代理与正向代理,以有效抓取HTTPS流量。

🔎

延伸解读

透明代理抓 HTTPS 的难点

文章指出,透明代理模式下,路由工具会修改数据包的目的地址,导致代理服务器无法直接获取客户端真正想访问的服务器地址。对于 HTTP,可以通过 Host 头获取;但对于 HTTPS,由于 TLS 加密,无法直接读取 Host 头,而解密又需要先与真实服务器握手,形成“鸡生蛋”问题。虽然可以通过 conntrack 或 getsockopt 获取原始目的 IP,但还需要 SNI 来获取域名,且并非所有客户端都发送 SNI。

Redsocks 如何解决跨主机透明代理

由于本地透明代理工具无法查询远端服务器的路由链路信息,导致无法获取真实目的地址。文章提出的解决方案是将透明代理服务部署在本机,然后转换成正向代理。Redsocks 可以直接作为透明代理服务器,将流量转发给上游的正向代理,从而避免修改 mitmproxy 代码。这样,远程设备的流量通过内网穿透到达本地后,由 Redsocks 接收并转发给本地的抓包工具,实现 HTTPS 流量的抓取。

方案实施中的注意事项

文章提到,在云手机上安装证书需要 root 权限,通过 adb reverse 构建信道,并使用 iptables 转发 80/443 端口的流量。实际操作中,HTTP 流量抓取正常,但 HTTPS 透明代理模式出现问题。使用 Redsocks 后,系统稳定性未受明显影响,但 mitmproxy 在从透明代理模式切换到正向代理模式时容易崩溃,这是一个需要留意的已知问题。

❓

Q&A

Redsocks是什么,它的主要功能是什么?

Redsocks是一个工具,可以作为透明代理服务器,将流量转发给上游的正向代理,解决HTTPS透明代理的问题。

如何在云手机上安装本地抓包工具的证书?

可以通过openssl命令将本地证书转换为指定格式,并传到云手机的/system/etc/security/cacerts/目录下。

透明代理和正向代理有什么区别?

正向代理由客户端主动发起流量请求,而透明代理则由路由工具强行转发流量,客户端对此无感知。

HTTPS流量抓取面临哪些挑战?

HTTPS流量由于TLS加密层,透明代理无法直接获取真实的目的地址,导致抓取困难。

使用Redsocks进行抓包时,系统稳定性会受到影响吗?

使用Redsocks未对系统稳定性造成影响,但mitmproxy在模式切换时可能会崩溃。

如何通过内网穿透技术将流量导入本地抓包工具?

可以通过暴露adb的tcpip端口,使用adb reverse命令构建云手机访问本机代理端口的信道。

🏷️

标签

➡️

继续阅读