我正在尝试在Mac OS X Lion(10.7.5)上设置透明代理,因此我可以使用mitmproxy(拦截来自Android应用程序的SSL流量)。我按照mitmproxy docs for setting up port forwarding with pf on Mac OS X中的步骤操作,他们都没有任何错误:
$ 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
答案 0 :(得分:2)
感谢您今天停止使用IRC频道。我已经跟踪了这一点,基本问题是rdr规则适用于入站流量。这意味着他们不会重定向来自盒子本身的流量。如果你考虑一下,这是不可避免的:我们无法区分非mitmproxy应用程序的出站连接和mitmproxy本身的出站连接。我们可以使用route-to将流量发送到lo0然后重定向它,但这会导致无限循环,其中mitmproxy自己的出站连接也会重定向回mitmproxy。
因为我对您的用例有所了解,所以我建议您尝试使用VirtualBox进行此操作。攻击计划是将VirtualBox网络设置为桥接模式,然后使用与源地址匹配的pf规则将流量重定向到mitmproxy。这应该做你想要的,并且由于无限重定向而不会在时间和空间上造成奇点。
如果您需要进一步了解,请再次通过IRC频道。
答案 1 :(得分:2)
你试过net.inet.ip.scopedroute=0
吗?来自http://lucumr.pocoo.org/2013/1/6/osx-wifi-proxy/:
现在,如果您完成上述设置,您会注意到 什么都没有用。原因是OS X内核中存在Bug 这需要将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文件 (续)
答案 2 :(得分:0)
您使用的是端口4500而不是默认端口8080。 你是否用端口规范启动了mitmproxy?:mitmproxy -T --host -p 4500
您是否按照在Android设备中设置证书的步骤操作了? http://mitmproxy.org/doc/certinstall/android.html
另一个问题可能是Android手机上的网关:首选项 - Wifi - 保留您正在使用的网络 - 编辑网络 - 高级选项 - 将机器的ip设置为网关,使用mitmproxy。
顺便说一句,我有没有ALTQ功能的警告,但它有效。