9

我正在尝试在我的 Mac OS X Lion (10.7.5) 上设置一个透明代理,因此我可以使用 mitmproxy (拦截来自 android 应用程序的 SSL 流量)。我按照mitmproxy 文档中的步骤在 Mac OS X 上使用 pf 设置端口转发,它们都没有任何错误:

$ sudo sysctl -w net.inet.ip.forwarding=1
Password:
net.inet.ip.forwarding: 0 -> 1

$ sudo pfctl -f pf.conf
No ALTQ support in kernel
ALTQ related functions disabled

$ sudo pfctl -e
No ALTQ support in kernel
ALTQ related functions disabled
pf enabled

但它似乎没有任何效果。当我在浏览器中访问网站时,它会发出直接请求,并且不会通过我指定的端口。这是pf.conf文件(en1是我的wifi):

rdr on en1 inet proto tcp to any port 80 -> 127.0.0.1 port 4500
rdr on en1 inet proto tcp to any port 443 -> 127.0.0.1 port 4500
4

3 回答 3

3

感谢您今天访问 IRC 频道。我已经对此进行了追踪,基本问题是 rdr 规则适用于入站流量。这意味着他们不会重定向来自盒子本身的流量。如果你仔细想想,这是不可避免的:我们无法区分来自非 mitmproxy 应用程序的出站连接和来自 mitmproxy 本身的出站连接。我们可以使用 route-to 将流量发送到 lo0,然后将其重定向,但这会导致无限循环,其中 mitmproxy 自己的出站连接也被重定向回 mitmproxy。

因为我对您的用例有所了解,所以我建议探索使用 VirtualBox 执行此操作的方法。一个攻击计划是将 VirtualBox 网络设置为桥接模式,然后使用匹配源地址的 pf 规则将流量重定向到 mitmproxy。那应该做你想做的事,并且不会由于无限重定向而导致时间和空间上的奇点。

如果您需要更多帮助,请再次访问 IRC 频道。

于 2013-12-08T08:45:34.280 回答
2

你试过了net.inet.ip.scopedroute=0吗?来自http://lucumr.pocoo.org/2013/1/6/osx-wifi-proxy/

现在,如果您完成上述设置,您会发现实际上没有任何效果。造成这种情况的原因是 OS X 内核中的一个错误,需要将 net.inet.ip.scopedroute 标志翻转为 0。我不完全确定它做了什么,但互联网报告说它通过用户首选项破坏了网络共享。无论如何,它修复了基于 ipfw 的转发,因此您可以使用 sysctl 翻转它:

$ sudo sysctl -w net.inet.ip.scopedroute=0

不幸的是,在 OS X Lion 中,这个标志实际上不能从用户空间翻转,因此您需要将其设置为引导参数,然后重新启动计算机。您可以通过编辑 /Library/Preferences/SystemConfiguration/com.apple.Boot.plist 文件来做到这一点(续...)

于 2014-09-30T06:08:18.947 回答
0

您正在使用端口 4500 而不是默认端口 8080。您是否使用端口规范启动 mitmproxy?: mitmproxy -T --host -p 4500

您是否按照步骤在 Android 设备中设置证书?http://mitmproxy.org/doc/certinstall/android.html

另一个问题可能是您的 android 手机上的网关:首选项 - Wifi - 保留您正在使用的网络 - 编辑网络 - 高级选项 - 使用 mitmproxy 将机器的 ip 设置为网关。

顺便说一句,我有同样的警告,没有 ALTQ 功能,但它有效。

于 2014-02-05T09:54:17.463 回答