之前做Web项目的时候,经常会使用Fiddler(Windows下)、Charles Proxy(Mac下)来抓包,调试一些东西;现在搞Android App开发,有时候也需要分析手机App的网络请求,包括参数、返回值等。在Mac上也是可以继续使用Charles Proxy来抓Android App发出的网络包的,大概的几个步骤:

1、保证手机和Mac连接的是同一个无线局域网

2、在Mac上打开Charles Proxy,菜单栏操作:Proxy→Proxy Setting,检查端口,一般保持默认,HTTP Proxy端口为8888

3、查看Mac当前的IP地址,之后作为手机的Proxy IP用:

4、编辑手机的WIFI连接,长按当前连接的WIFI网络:

5、选择“修改网络”,进入网络连接的编辑模式(选择“显示高级选项”)并保存:

6、这个时候可以在手机App上随意进行一个操作,比如Tieba客户端的一键签到:

7、观察Charles Proxy上的抓包情况:

抓到的数据包显示非常友好,并且可以对已经发出去的请求进行编辑,然后重新发送(模拟请求,并分析结果)。

以上就是一个大概的使用过程,关于这个Charles Proxy,不介绍太多;Windows下,可以使用Fiddler(2/4),默认端口也是8888,当然,你也可以随便改。

另外,附上Charles Proxy For Mac的下载包(附带序列号:给懒人): Charles-Proxy-For-Mac-3.8.1

代理工具Charles使用

一.跟踪HTTPS

1.下载官方的证书ssl.zip证书,解压成*.crt

2.可以通过邮箱或者发布到自己的服务器的方式,然后用手机去下载安装crt文件。

3.charles设置Proxy-->SSL,勾选Enable SSL Proxying,下面点击"Add",将你需要验证的域名+端口号添加进去并且勾选。比如:*.my.com,  mobileapi.myserver.com

4.手机设置对应代理的IP,这个时候就可以看见Charles中https请求的内容了

PS: 步骤3中如果你勾选了,但是你的设备没有装证书,如果走代理则会请求失败。不勾选,可以请求成功,但是无法看见内容。

碰到mthd="Connect",request里看见“SSL Proxying not enabled for this host: enable in Proxy Settings, SSL locations”的错误,则表示第3步没有将域名设置好。


二.强大的mapping功能

简单来说,可以远程的某个文件代理到本地文件,从而进行调试。

1.打开我csdn的blog首页,然后可以在charles看到所加载的页面和相关资源,找一个js文件做代理,如图:

macbook 使用wireshark抓包 Android mac app抓包_SSL

2,创建一个本地文件1.txt,我将realtime.js的 response拷贝下来,并且在开头添加自己的js语句 “alert(123)”

3.选择"Map Local..",设置如图:注意的是在paramter里我设置的是"*",因为很多情况下接口可能会加随机串,当然URL也可以使用通配符来匹配

macbook 使用wireshark抓包 Android mac app抓包_抓包工具_02

4.点击OK,重新刷新页面。页面弹出alert,内容为:"123"。并且在"Notes"的Tab里会告诉你“Mapped to local file: /Users/apple/Desktop/1.txt”,表示成功

macbook 使用wireshark抓包 Android mac app抓包_Mac_03


5.如果要删除已经设置的map地址,可以在Tools-->Map Local... 里管理,添加或者删除,非常方便。


三.网速模拟

Proxy-->Throttling Setting,可以模拟各种情况下的网络速度,从而可以在低速情况查看APP的使用情况

部分设置含义,Bandwidth(带宽)、Utilistation(利用百分比)、Round-trip(往返延迟)、MTU(字节)


四.断点功能

APP某个界面需要调用接口,并且返回数据来绘制界面。我们可以通过使用断点功能来篡改请求的数据或者返回的数据,达到模拟的效果。让我们来看看怎么做

1.类似于mapping,我们可以针对接口右键选择"BreakPoints",这样这个接口就被加入到断点状态了

2.需要进一步修改断点的属性,可以在菜单栏"Proxy"-->"BreakPoints"里进行添加删除或者修改,配置方式和mapping雷同,也可以使用通配符来操作,并且可以选择这个断点是在request还是response,还是两者都要

3.这个时候再刷新界面,会直接跳转到断点模版,这个时候你可以在对应状态情况下修改request或者response,然后点击下方按钮“Execute”。

macbook 使用wireshark抓包 Android mac app抓包_Mac_04


五.重复发送

这个和前端似乎关系不大,可以对接口测试健壮性,也是右键点击某个请求,然后"repeat" 或者"repeat Advance",后者可以设置循环调用次数和间隔



六.支持中文显示

打开Charles.app,找到Info.plist,然后添加参数-Dfile.encoding=UTF-8


macbook 使用wireshark抓包 Android mac app抓包_App_05