在 macOS 上使用 mitmproxy 透明代理进行网络抓包

什么是透明代理

透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改变你的报文,并会传送真实 IP,多用于路由器的 NAT 转发中。

为什么要用透明代理

普通代理需要在手机或其他客户端网络中进行代理设置,但有些情况下我们没办法设置,例如某些系统或电视 TV,或有些 App 代码层面忽略了代理,例如新浪微博 App,这些情况下都无法通过普通的中间人代理进行抓包。

具体实施步骤:

1.共享本机有线网卡为 Wi-Fi 热点,系统偏好设置 - 共享 - 互联网共享,Wi-Fi 选项中设置密码

2.启用 IP 转发,终端运行

sudo sysctl -w net.inet.ip.forwarding=1

3.创建并启用规则,将 bridge100 的 80、443 端口的流量转发至本机 8080 端口,终端运行

echo "rdr pass on bridge100 inet proto tcp to any port {80, 443} -> 127.0.0.1 port 8080" | sudo pfctl -ef -

bridge100 为共享热点的网卡,可以通过 ifconfig 来查找并替换命令

查看是否生效,终端运行

sudo pfctl -s nat

4.配置 sudoer 以允许 mitmproxy 访问 pfctl,以根用户身份在系统上编辑文件 /etc/sudoers,将以下行添加到文件末尾,终端运行

sudo sh -c "echo ALL ALL=NOPASSWD: /sbin/pfctl -s state >> /etc/sudoers"

5.访问

Downloads​mitmproxy.org/downloads/

下载 mitmproxy

6.启动 mitmproxy

mitmproxy --mode transparent --showhost

如果使用 web 页面查看抓包,只需要运行命令,会自动打开网页

mitmweb --mode transparent --showhost

7.在需要抓包的设备连接共享热点,访问 http://mitm.it/ 安装证书文件并信任

8.准备好一切,可以开始抓包了

参考资料:

Transparent Proxying​docs.mitmproxy.org/stable/howto-transparent/