什么是透明代理
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改变你的报文,并会传送真实 IP,多用于路由器的 NAT 转发中。
为什么要用透明代理
普通代理需要在手机或其他客户端网络中进行代理设置,但有些情况下我们没办法设置,例如某些系统或电视 TV,或有些 App 代码层面忽略了代理,例如新浪微博 App,这些情况下都无法通过普通的中间人代理进行抓包。
具体实施步骤:
1.共享本机有线网卡为 Wi-Fi 热点,系统偏好设置 - 共享 - 互联网共享,Wi-Fi 选项中设置密码
2.启用 IP 转发,终端运行
1 | sudo sysctl -w net.inet.ip.forwarding=1 |
3.创建并启用规则,将 bridge100 的 80、443 端口的流量转发至本机 8080 端口,终端运行
1 | echo "rdr pass on bridge100 inet proto tcp to any port {80, 443} -> 127.0.0.1 port 8080" | sudo pfctl -ef - |
bridge100 为共享热点的网卡,可以通过 ifconfig 来查找并替换命令
查看是否生效,终端运行
1 | sudo pfctl -s nat |
4.配置 sudoer 以允许 mitmproxy 访问 pfctl,以根用户身份在系统上编辑文件 /etc/sudoers,将以下行添加到文件末尾,终端运行
1 | sudo sh -c "echo 'ALL ALL=NOPASSWD: /sbin/pfctl -s state' >> /etc/sudoers" |
5.访问
Downloadsmitmproxy.org/downloads/
下载 mitmproxy
6.启动 mitmproxy
1 | mitmproxy --mode transparent --showhost |
如果使用 web 页面查看抓包,只需要运行命令,会自动打开网页
1 | mitmweb --mode transparent --showhost |
7.在需要抓包的设备连接共享热点,访问 http://mitm.it/ 安装证书文件并信任
8.准备好一切,可以开始抓包了
参考资料:
Transparent Proxyingdocs.mitmproxy.org/stable/howto-transparent/