手机无法抓包
常用的抓包软件主要有Fiddler和Charles(mac电脑使用),其它的还有Wireshark(用来抓取静态资源),Httpwatch等,功能大同小异。
这些工具开发前端后台用来抓包调试接口,测试抓包检测接口,爬虫抓包用来请求接口获取数据,非常重要。
Fiddler免费使用,学习可以参考:http://www.cnblogs.com/yyhh/p/5140852.html
Charles免费版只能使用30分钟,而且每次打开需要等待10s。学习可以参考:https://www.jianshu.com/p/fb2bdde5b498
Charles破解-点击help->Register Charles,输入如下
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
注意:首先要配置好代理,确保http的请求都能抓取到。
问题描述一:提示无法链接网络
小米6手机,联想电脑,公司网络环境,Fiddler和Charles都装的有,可以抓电脑网页和模拟器的app,但是手机连不上,使用小米默认浏览器访问代理ip或者chls.pro/ssl安装证书,提示无法链接网络,通过电脑下载证书装到手机上,还是不行。
诊断
用cmd进入终端,ping 手机的ip(手机ip如果代理的地方没有,可以下载一个开发抓手app查看),无法ping通,ping同事的手机设备ip也无法ping通,说明电脑有问题,但是电脑的证书什么都没有问题,同事的抓包就可以正常使用,困扰很长时间。后来参考到 https://testerhome.com/topics/2651 的讨论–原因是路由器的设置问题。
解决
在路由器管理设置里,找到安全设置>用户隔离,状态改为关闭.(或者找公司的IT管理人员解决),最终目的是确保电脑得DNS服务器地址与手机上显示得路由器地址是同一个,即手机与电脑在一个网段:
问题二:所有得https都不能抓取
这是由于没有配置decrypt https traffic或者enable ssl proxying,如下配置好以后,部分网页或者app得https就可以抓取了。
Charles: Proxy ->SSL Proxying Settings点击“Add”按钮,在弹出框的 “Host” 和 “Port” 都输入“*”,表示所有,点击OK。
问题三:部分https不能抓取,提示unkown或者tunnel to 443
接上个问题,为什么部分https可以抓取,部分的抓取不了呢?而部分app抓取https的时候会出现tunnel to 443呢,无法抓取,那么这部分app是如何防护中间人攻击的呢?原因是部分app在证书检验方面做的不够,没有完全校验。
原因:部分app在开发时就将服务端证书一块打包到客户端里,在HTTPS建立时与服务端返回的证书比对一致性,进而识别出中间人攻击后直接在客户端侧中止连接,这种app就是做了完全校验。自安卓7以后,系统默认不信任用户证书,由于个人安装的证书是授权在个人的下面的,并没有安装到手机设备的根路径下,因此对于没有打包服务端证书到客户端的app做校验的app,证书依旧被信任了,可以抓取。反之对于做了完全校验的app即使安装了证书也无法生效,因为证书不被信任。
知道原因了如何解决呢?
解决办法一:最简单实用的方法
用android 内核为7.0一下的手机版本,安装的证书默认被信任,那么https就可以抓取到了。可以买二手机或者将能降级到7.0以下系统的手机刷机回去。目前市场上的手机只有小米有刷机包支持系统降级。
解决办法二:手机root后,将证书安装到设备的系统路径下
解决办法三:使用xposed伪造4G网络环境
装好xposed后,使用其模块连接状态修改器,伪造成4G网络,发送请求抓包。但是这种方法在一些情况还是出现unkonw。
其他注意事项
1.关闭电脑的防火墙
2.如果需要抓取手机app的数据包,需要手机和电脑在都连接同一个无线网络
3.抓完包以后将fiddler关闭(提高访问网络的速度)同时将手机上的代理关闭 (如果不关闭代理,当fiddler关闭,或者是两者连接的不是同一无线网络,手机会不能正常的访问网络)