最近在调试APP的时候需要使用Charles抓包,但是一通操作下来手机始终无法连接电脑的代理。具体现象为
Mac + 连接Wifi + 打开Charles 设置好端口号,勾选代理。
App 连接同样的Wifi + 手动设置代理 + Mac的IP地址+设置好的端口号
手机连接代理后,无法连接网络,抓包窗口没有发现相关的网络请求。
网上很多文章的解决办法都说让电脑有线连接,开启wifi热点,让手机连接热点。这样确实可以解决问题,但是现在无论公司还是家里,开发环境基本都是笔记本+WiFi,让我单独扯一根网线出来实在是难为我。并且这并没有彻底解决连接同一个WiFi却无法抓包的问题,只是换了个方式绕开了。
研究下来发现其实解决办法也比较简单。连接同一个wifi但是不能抓包,一个可能的原因是路由器的设置问题。想要抓包,首先要保证手机能够通过访问电脑的ip的地址,现在的路由器可能是因为安全的原因,默认是都禁止了局域网内不同设备互相访问的。也就是说手机都无法访问电脑,无法把电脑当做代理服务器,也就无法抓包成功了。
我家里路由器型号是华为路由WS5200, 进入管理台后,路由器有个DMZ主机的功能,默认是关闭的。从他的说明可以大致理解意思为在局域网内设置某个设备为主机,其他的设备可以访问DMZ主机,正是我们需要的功能。
把MAC设置为DMZ主机之后,Charles立刻就能抓到想要的数据了。不同的路由器设置可能不同,但是至少可以提供一个参考的思路。