抓包工具Charles使用

###

1,Charles抓包工具的原理

原理都是在客户端和服务器之间充当代理服务器

正常的情况:客户端-------服务器

增加了Charles的情况:客户端 -----Charles -----服务器

Charles有两个功能,

1,接收客户端的请求,并且转发给服务器,

2,服务端返回结果给Charles,然后Charles转发给客户端,

https代理的原理:

如果是https,增加了加密的情况,这个抓包的逻辑是什么:

客户端和代理服务器建立连接,----代理服务器和真的服务器建立连接,

真的服务器下发证书给代理服务器-----代理服务器签名证书然后下发给客户端,

客户端使用签名证书生成公钥传给代理服务器,-----代理服务器用自己的签名证书解密之后,再用用服务器的证书加密传给服务器,

服务器传递加密数据给代理服务器,---代理服务器解密并加密数据传递给客户端,

然后后面的数据传输基本都是这样的了, 

2,Charles的安装配置

安装是很简单的,

代理的设置:proxy--proxy setting --proxy标签页配置端口号port:8888,----ok

访问控制设置:proxy--access control setting --- 会有一个ip列表---点击add添加ip---ok

mac代理设置:系统偏好设置--网络--代理--选择http和https代理---输入ip地址和端口号--保存(ip地址可以在Charles-help-local ip address 中查看)

mac代理设置还有更简单的方法:proxy-macOS proxy,选中就可以了,

SSL代理设置:proxy -- SSL proxy setting ---选中enable ssl setting --add *:* --保存,不设置这个可能会看到请求的返回内容是乱码,是因为做了加密

3,Charles主要功能

1,支持http和https代理

2,支持流量控制,比如弱网测试

3,支持接口并发请求,可以做简单的并发测试,实际很简单,就是通过:右键--repeat advanced --设置重复次数,

4,支持重发网络请求,这个很重要,重放攻击,实际很简单,就是通过,右键--repeat ,就可以了,或者通过快速工具栏的刷新按钮也可以,

5,支持断点调试,就是拦截请求和响应,--下面有介绍,也很简单,

界面介绍:

分成三部分,

1,菜单栏,这是主导航栏,很多功能在这里,

比如清空回话,重发请求,断点调试等,

2,左侧的请求导航栏,所有的请求可以在这里看到,

这个可以看到可以通过域名查看请求,也可以通过时间查看请求,还可以过滤请求,这是主要的功能,

3,点击左侧具体的一个请求,

右侧的上半部分是请求内容,

这个部分最重要的是overview,还有一个contents,这个contents是最重要的,可以看到header,cookie,请求参数,返回内容,

右侧的下半部分是响应内容,

如果是接口的响应内容,可以通过json查看json格式的返回数据

如果是图片的响应内容,可以通过image的格式查看到图片的显示

如果是html的响应内容,可以通过html格式查看到html内容,不能像浏览器一个看到预览,因为抓包工具没有渲染页面的能力,css,js,

可以搜索内容,这个搜索实际是很强大的,但是总是定位的地方有些不准确,不知道是不是我操作有问题,

4,Charles中间人攻击,拦截请求和响应, 

第一种方法,断点调试,这个这是一次性的,

打开断点调试:

首先打开代理开关,proxy--enable breakpoints 

然后在要左侧,在需要断点的请求上面右键,选择breakpoint,

然后重新浏览器请求这个连接,就会进入断点,这个断点会有两次一个是request的请求发送出去之前,还有一个response接收过来的之后做拦截,

所以可以修改请求参数,也可以修改返回内容,

关闭断点调试,

关闭代理开关,proxy--disable breakpoints 

如果想要关闭单个url的断点,还是在请求上右键,把breakpoint取消勾选就可以了,

第二种方法,使用映射本地文件的方式来调试,

第一步:把需要映射的html,在本地新建一个html文件,

第二步,在Charles的右侧,选择需要替换本地文件的请求,右键--点击map local,然后会自动填充进来域名端口路径,你只需要选择需要映射的本地文件,

第三步,修改本地的文件内容,刷新浏览器,就会发现返回的内容,变成自己本地的文件内容了,

还可以使用这个方式进行js的debug,

比如在html里面的script标签里面,输入alert(变量名),就会打印这个变量,

比如在某一行,输入debugger;这样就可以实现在这个地方打断点,

####

其他

抓包工具,比如fiddler,Charles,都是只能抓应用层的协议,wareshark可以抓传输层的协议,但是一般不用这个软件太重了,

另外python有一个抓包工具,mitmproxy,这个抓包工具很厉害,后面要学会使用,

抓包工具抓不到的原因,

1,可能是因为没有走http协议,而是走的tcp协议,你用抓包工具,就抓不到, 

2,可能是缓存的原因,清空缓存试试

###

原文地址:https://www.cnblogs.com/andy0816/p/15146008.html