1.抓取移动设备发送的http请求
1、先将移动设备连接到Charles客户端。首先在电脑中输入cmd打开命令行窗口,输入ipconfig查看本机连接无线网络的IP地址,这个地址作为移动设备连接Charles客户端的代理地址,
2、打开Charles客户端,点击Proxy->Proxy Settings菜单,可以设置移动设备连接到Charles的端口(8888),这样移动设备代理配置需要的ip地址和端口号都有了。
3、打开手机wifi,设置所连接的wifi的代理网络;wifi代理设置为手动,代理的服务器ip填写上一步骤中查看到的电脑ip,端口填写上一步骤提到的charles的服务端口:
注意:移动设备配置之后,第一次通过手机访问手机中的发送请求时,Charles会弹出提示框,提示有设备尝试连接到Charles,是否允许,如果不允许的话,手机发送请求失败,点击Allow允许,这样这个设备的IP地址就会添加到允许列表中,如果错误点击了Deny可以重启Charles会再此提示,或者通过Proxy->Access Control Settings手动添加地址,如果不想每个设备连接Charles都要点击允许的话,可以添加0.0.0.0/0允许所有设备连接到Charles。
4、Charles是通过将自己设置成代理服务器来完成抓包的,勾选系统代理后,本地系统(如果通过浏览器发送请求)发送出去的请求都能被截取下来。因此,如果想只抓取手机APP发送的请求的话,可以不勾选WindowsProxy选项,这样在测试时就不会被本机Http请求所干扰。
5、如果想要抓取浏览器发送的请求包,勾选WindowsProxy选项之后还是抓取失败,可能是浏览器没有设置成使用系统的代理服务器,只要设置成使用系统的代理服务器,或者将浏览器的代理服务器设置成127.0.0.1:8888也可以成功。
1.1.12.启动手机,打开软件,就可以进行联网抓包测试
Charles提供两种查看封包的页签,一个是Structure(结构),另一个是Sequence(序列),Structure用来将访问请求按访问的域名分类,Sequence用来将请求按访问的时间排序。任何程序都可以在Charles中的Structure窗口中看到访问的域名。
1.1.13.过滤不必要的网络包(过滤请求)
在抓取手机发送的请求时,有许多请求包是对图片等不需要关注的资源的请求,我们只想对指定目录服务器上发送的请求进行抓取,这时候就可以通过过滤网络包的方式实现。有两种实现方式:
1)选择Proxy->Recording Settings菜单,然后在include栏添加需要抓取包的指定服务器请求协议、地址、端口号,也可以在exclude栏添加不抓取包的地址。
在主界面的中部的 Filter 栏中填入需要过滤出来的关键字。例如我们的服务器的地址是:http://blog.csdn.net, 那么只需要在 Filter 栏中填入 csdn 即可。
Charles抓包详解
Filter : 过滤,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求
Overview : 查看这次请求的详细内容,例如耗时详细列车了请求开始时间、结束时间,响应开始时间、结束时间,总耗时、DNS耗时、网络延时等。
对于Size也详细列出了请求头大小、响应头大小、压缩比例等内容。
URL:进行网络请求的链接;
Status:当前状态,complete表示请求完成;
Responce Code:返回码。不同的接口,不同的请求结果,返回码都不同;
Protocol:使用的协议;
Method:请求方式,如GET请求,POST请求等;
Kept Alive:判断当前是否正在链接(活跃);
Content-Type:发送的内容类型,如这里用的是XML文本,以UTF8的方式发送;
Client Address:客户端的IP地址;
Remote Address:远程服务器的IP;
Timing:
Request Start Time:请求开始的时间;
Request End Time:请求结束的时间;
Response Start Time:返回开始的时间;
Response End Time : 返回结束的时间;
Duration : 总时间;
Size:
Request Header :请求的头部大小;
Response Header:返回的头部大小;
Request : 请求发送的大小;
Response:返回数据的大小;
Total:所有数据大小;
Request Compression : 请求压缩;
Response Compression : 返回压缩;
Request : 查看请求内容(底下的Headers,Query String,Cookies,Raw。)
Headers:发送请求的头部信息;
Query String : 发送参数列表;
Cookies: 浏览器缓存;
Raw:发送的原生数据,包括了头部和参数;
Reponse : 查看响应内容
Headers:是返回的头部信息;
Text:返回信息(除去头部)后的文本;
Hex:返回信息的16进制表示;
XML:我返回的数据是XML。如果你返回的是JSON,这里就会显示JSON;
XML Text:如果你返回JSON,这里会显示JSON Text;
Raw:返回的所有原生数据,包括头部;
Summary: 查看发送数据的一些简要信息(主机,状态码,数据的类型,header和body大下,加载时间,总时间)
Chart: Summary中简要信息以图表形式展示
Notes: 其他信息
charles设置代理,手机进行抓包
这一步的目的是为了移动设备连接到Charles,这样移动设备发起的所有请求才能在Charles中看到
首先确保自己手机的wifi和电脑在同一网络下,千万不要用4G,那么没办法抓包,必须连接wifi
使用Charles工具查看PC本地IP和端口号(端口号默认为8888,也可自行修改),选择“Help->Local IP Address”
选择“Help->SSL-Proxying->install charles Root ....Browser”查看,这样子可以一下子把端口号和ip看到
拿出我们需要设置代理的Android手机,找到wifi,长按或者点击查看wifi详情(各类型Android手机方法大同小异,多进行尝试)
然后进入到wifi详情页面
把代理一栏从无改为手动,并在里面输入刚才看到的IP和端口号,例如:192.168.1.x(x为你自己的号码,每个人都不一样)
点击保存或者连接,如果没有则直接返回退出然后再次进入详情,看看代理一栏是不是已经变成了刚才自己输入的ip和端口号,如果显示则代表代理设置成功。如果继续显示代理为无,则代表刚才你没有保存,再试一遍记得如果你不需要用手机设置代理了,把代理记得关掉,不然会影响你浏览某些网页和应用。这时,手机设置好了,打开你需要进行调试的app,你会发现电脑上charles出现一条提示:
第一个箭头标注的是你的手机ip地址。你需要允许该手机的练级,点击“Allow”
这个提示,只会在手机首次链接电脑的时候出现,同意后后面则不会出现。
注意,如果你的手机链接时没有出现该弹窗,去检查自己刚才手机端的代理是否设置错误
如果设置没有问题,可选择“Proxy->Access Control Settings”手动进入Charles的设置选项,添加当前手机的IP
手机IP查看方式:
进入wifi详情
好了,到此为止,你基本已经完成了大半的设置,基本可以正常进行抓包了
但是,部分手机还需要安装下载一个手机证书才能正常使用,安装方法如下:
同样点击Help->SSL-Proxying->install charles Root ....Browser,查看手机证书下载
这一段是告诉你,需要你去浏览器下载一个证书
此时你打开手机默认浏览器,然后在网址栏里输入
chls.pro/ssl
记得,此时你一定要是代理开启状态
你会得到一个文件下载提示,下载后,在浏览器下载内容里找到刚才那个crt文件,打开后进入命名页面
可自定义名称,或者不改。点击保存。部分手机此时会让你输入手机锁屏密码,或者让你设置锁屏,照做就可以了。
出现如下提示代表安装成功。
通过 Charles 进行 PC 端抓包
Charles 会自动配置浏览器和工具的代理设置,所以说打开工具直接就已经是抓包状态了。只需要保证一下几点即可:
确保 Charles 处于 Start Recording 状态。
勾选 Proxy | Windows Proxy 和 Proxy | Mozilla FireFox Proxy。
通过 Charles 进行移动端抓包
手机抓包的原理,和 PC 类似,手机通过把网络委托给 Charles 进行代理与服务端进行对话。具体步骤如下:
使手机和电脑在一个局域网内,不一定非要是一个 IP 段,只要是在同一个路由器下即可。
电脑端配置:
关掉电脑端的防火墙(这点很重要)。
打开 Charles 的代理功能:通过主菜单打开 Proxy | Proxy Settings 弹窗,填入代理端口(端口默认为 8888,不用修改),勾选 Enable transparent HTTP proxying。
如果不需要抓取电脑上的请求,可以取消勾选 Proxy | Windows Proxy 和 Proxy | Mozilla FireFox Proxy。
手机端配置:
通过 Charles 的主菜单 Help | Local IP Address 或者通过命令行工具输入 ipconfig 查看本机的 IP 地址。
设置代理:打开手机端的 WIFI 代理设置,输入电脑 IP 和 Charles 的代理端口。
设置好之后,我们打开手机上的任意需要网络请求的程序,就可以看到 Charles 弹出手机请求连接的确认菜单(只有首次弹出),点击 Allow 即可完成设置。
完成以上步骤,就可以进行抓包了。
通过 Charles 进行 HTTPS 抓包
HTTPS 的抓包需要在 HTTP 抓包基础上再进行设置。需要完成一下步骤:
完成 HTTP 抓包配置。
电脑端安装 Charles 证书:通过 Charles 的主菜单 Help | SSL Proxying | Install Charles Root Certificate 安装证书。
设置 SSL 代理:通过主菜单打开 Proxy | SSL Proxy Settings 弹窗,勾选 Enable SSL proxying。
移动端安装 Charles 证书:通过 Charles 的主菜单 Help | SSL Proxying | Install Charles Root Certificate on a Mobile Device or Remote Browser 安装证书。
设置好之后,我们打开手机上的任意需要网络请求的程序,就可以看到 Charles 弹出手机请求连接的确认菜单(只有首次弹出),点击 Allow 即可完成设置。
完成以上步骤,就可以进行 HTTPS 抓包了。
Charles弱网测试
我们借助Charles工具做弱网的测试,或者模拟2G、3G的网络情况。
Charles的使用方法如下:
首先,打开Charles,在Throttle Settings中设置网络状况,比如:
1、点击Proxy->Throttling Settings
2、☑️勾选[Enable Throttling]使的限制网速可用,相当于开启了限制网速的功能
3、关于网速的选择
概念介绍:
Bandwidth(带宽,即上行、下行数据传输速度)
Utilistation(带宽可用率,大部分modern是100%) (利用百分比)
Round-trip(往返延迟,请求的时延) (往返延迟)
MTU(最大传输单元,即TCP包的最大size,可以更真实模拟TCP层,每次传输的分包情况)
Releability :(指连接的可靠性。这里指的是10kb的可靠率。用于模拟网络不稳定。)
Stability :(连接稳定性,也会影响带宽可用性。用于模拟移动网络,移动网络连接一般不可靠)
4G:(16384带宽)、(80往返延迟)
3G:(4096带宽)、(120往返延迟) 300k-2Mbps左右
2.5G(GPRS)一般在100kbps
2G(GSM)一般在5-9kbps
如果不习惯自定义设置带宽等,可直接在Throttle Preset下拉列表中选择,按照顺序,网速逐渐提升
3.3如果只想对某地址的请求进行弱网测试,☑️[Only for selected hosts]
进行这项设置后,我们会看到小红旗处于工作状态。
然后,打开Sequence查看每个请求的执行情况,比如:
上图中可以看到每个请求的大小(size),以及请求的状况(status)。
PS:弱网、2G、3G建议的上下行速率如下,同时还可以控制丢包率的数据
网络 上行 下行
弱网 10 30
2G 15 50
3G 384 2800
压力测试:
给服务器做压力测试
我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下。
我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项,如下所示:
接着我们就可以在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。
设置断点 Breakpoint
操作步骤:
在Charles的structure窗口,选中想要进行断点调测的请求连接(如果有下级目录,也可以展开之后选择自己想要调测的那级目录)
点击【右键】,在弹出菜单中选择【Breakpoints】
再次请求该页面,会出现下面的页面:
点击Execute后,出现响应:
修改请求和响应报文
以修改CSDN未读消息接口为例,操作步骤:
设置完断点之后,刷新CSDN博客首页,进入Charles断点调测
在Charles的【Breakpoints】窗口,选择【Edit Request】TAB,然后根据需要选择底部的【URL】、【Headers】或者【Cookies】等进行修改
点击下面的【Execute】执行请求发送
编辑响应报文的操作类似,点击【Edit Response】即可
Charles中修改请求、修改返回值
1、 找到要修改的请求, 设置断点
2、修改请求信息
3、修改返回信息,并重新发送
注意:
1.在手机上抓的包也可以通过上述方法进行修改请求和返回的报文。
2.https都是加密的,需要有证书的才可以抓包,http或者bbs的--一般的证书是以.cret结尾的文件双击就可以装证书
3.通过抓包,可以分析和定位问题
4.URL转码--浏览器对特殊字符处理时,就自己定义了比如%20=空格,以%开头正常的
一.Fiddler的使用
1.fiddler界面的左边是捕捉到的所有http请求列表,包含http请求的结果,主机名称,URL等信息。在浏览器任意打开一个网站都会显示到这个列表,如图所示
界面的右上部分窗口是http请求的详细信息,包括http头部信息,请求方法,头部字段等内容,如图所示
点击Raw选项卡,可以看到http请求的原始信息,除头部信息外,还可以看到cookie和请求数据内容,如图所示,可以多开几个不同网站比较一下内容的差异
Fiddler界面的右下角是http的响应内容,Header选项卡可以查看响应头部信息,如图所示
同样的,可以在Raw选项卡中查看响应的原始数据,如图所示
二、Fiddler抓取请求
Fidder抓请求和charles是一样的,默认端口号也是8888,手机设置代理之后,发送请求,fiddler就可以抓到了。
1、过滤请求
在使用fiddler或者charles抓请求的时候,有的时候有很多请求,我们想要找到自己想要的请求就不怎么方便了,就需要过滤请求,只过滤我们想要的请求,现在比如说我们想要抓天天网的请求,那就过滤天天网的host, app.mvp.tiantian.com
2.Fiddler修改请求、修改返回值
Fiddler修改请求和修改返回和charles差不多,一点不一样的就是:
找到修改的请求--->设置断点--->修改请求,在发出请求之前设置断点,修改请求,发送;修改返回,在获取到返回之后设置断点,修改返回值,发送给客户端
3.Fiddler修改端口号
我们在使用fiddler的时候,默认的端口号是8888,如果端口号被占用的话,就需要修改端口号,改成一个其他的,没有被占用的。