常用代理工具
8.6 代理简介
8.6.1常用代理工具
- 代理工具:charles、fiddler、mitmproxy、burpsuite
- 高性能代理服务器: spuid、dante
- 反向代理:nginx
- 流量转发与复制:em-proxy、gor、iptable、nginx
- socks5代理: ssh -d 参数
8.6.2 代理原理
8.6.3 使用nc演示代理
nc lk 9999 < /tmp/fifo |sed -l -e 's/^Host.*/Host:site.baibu.com/' | tee -a /tmp/req.log|nc site.baidu.com 80|tee -a /tmp/res > /tmp/fifo
8.6.4代理的必备特性
- 代理功能:http/https、socks5
- 请求模拟工具:拼装请求、重发请求、重复请求
- 网络环境模拟: 限速、超时、返回异常
- mock:请求修改、响应修改
- fake : 用测试环境代替真实环境 (用测试环境的数据,测试真实环境的业务)
8.6.5 推荐代理工具
- Charles: 开发、测试必备
- mitmproxy : 测试开发必备 (编写脚本,自动化)
- zap : 测试工程师安全测试工具
- burpsuite : 黑客必备渗透工具
- fiddler: 跨平台不好,不推荐
- postman:代理功能弱,不推荐
8.7 Charles功能简介
Charles安装与配置:https://www.cnblogs.com/fanpl/articles/10750932.html
Charles常用功能:https://www.cnblogs.com/fanpl/articles/11502370.html
8.7.1 HTTP/HTTPS抓包
8.7.4 交互式拦截与响应--断点
2.4 FACK对测试环境测试线上环境
2.5 FACK用本地cache代替线上环境
三、charles的使用
1.2.charle的主界面介绍
1.2.1 界面简介
启动后,页面展示如下:
1.2.2 显示模式
Charles有两种显示模式,stucture 和sequence。支持来回切换。
(1) Structure形式如下图 优点:可以很清晰的看到请求的数据结构,而且是以域名划分请求信息的,可以很清晰的去分析和处理数据。
(2)Sequence形式如下图 优点:可以看到全部请求,这里的结果以数据请求的顺序来显示,最新的请求显示在最下面
综上,两种形式各有千秋,structure 适合对单一系列的访问请求从宏观上进行把握,可以快速定位。sequence 适合精确定位内容,因为每条sequence 都有size,status等属性信息,方便快速定位这条结果的价值.
对于我自己来说,更倾向于Charles的第一种树状视图,比fiddler的列表视图好的地方在于:多次刷新后的请求会被归纳到树里面,更加一目了然,用fiddler的时候,有点强迫症的同学,都要点击clear,有木有…
1.2.3 工具条简介
⑴~⑷ session
Charles有个会话(session,不是指http中的session)的概念,可以理解为浏览器中的tab,这个功能在需要调试多个站点页面时很实用,当你刷新页面的时候,只会在当前session中捕获请求。
(PS:ctrl+N创建个新的session,ctrl+W关闭当前session)
⑸垃圾桶———功能是clear,清理掉所有请求显示信息。
⑹搜索关键字(望远镜的那个)———功能是搜索关键字,也可以使用ctrl+f实现,可以设置搜索的范围。
⑺停止监控
———功能是领抓去的数据显示或者不显示的设置。 这个本人认为是charles工具很方便的一个,一般都使其为不显示抓取状态,只有当自己测试的时候的前后,在令其为抓取并显示状态。这样可以快准狠的获取到相关自己想要的信息,而不必在一堆数据请求中去寻找。
⑻开启/停止网速模拟
测试时,会用到网速模拟,具体的在后面功能部分介绍,此处略.....
⑼开启停止断点功能
⑽刷新单个请求
⑾编辑请求
编辑修改功能,可以对下图中的请求信息进行修改,修改完毕后点击Execute就可以发送一个修改后的请求数据包。
⑿校验请求的结果
⒀工具
⒁设置
1.2.4 右键请求菜单
右键请求出现菜单,Charles的右键菜单功能比fiddler强大太多了。
1.2.5 请求详情
请求详情跟fiddler相似,但直观不少:
1.2.5.1 overview—请求总览
(1)URL(统一资源定位符)
https:协议方案名
M.xxx.baidu.com:服务器地址,这里是DNS可解析的名称。同事也可以是ipv4d地址名,还可以是[0:0:0:0:0:0:0:1]这样用方括号括起来的IPV6地址名。
App/getindexPage:带层次的文件路径。指定服务器上的文件路径来定位特指的资源。
URL——请求url的路径、文件和查询字符串
Status——状态是否已完成
Notes——备注
Response Code——响应状态码
Protocol——该seesion使用的协议(Http/https/ftp)
SSLssl——协议版本号
Method——该seesion使用的方法(get/post/put等)
Content-Type——响应的content-type头
Timing:
Request Start Time——接收到的第一个请求的第一个字节的时间点
Request End Time——发送到客户端的最后一个响应的最后一个字节的时间
Response Start Time——响应开始时间
Response End Time——响应结束时间
Duration——整个请求—响应持续时间
DNS——所有选中的session解析DNS所花费的时间的总和
Connect——所有选中session建立TCP/IP连接所花费的时间总和
Request——请求耗费时间
Response——响应耗费时间
Size
Request Header——请求头大小
Response Header——响应头大小
Request
Response
Total——请求头+响应头字节大小
1.2.5.2 request—请求头
名词解释:
(1)Appid : 在COM中,安全控制的最小单位是进程,每个进程都有对应的安全控制策略。进程的安全控制策略保存在注册表中,存储位置为:HKCR\AppID\访问权限、启动权限等安全配置信息。开发COM组件时,可以在COM组件对应的CLSID子键下
新建字符串类型的项,名称:AppID,值:该COM组件所在进程的AppID值。
channel:渠道包来源
Contextuuid:设备唯一标识
1.2.5.3 response—请求结果
Json格式,具体含义参考接口文档。(其中raw是原始数据包的状态)
1.2.5.4 summary—请求详情,包含加载时间等
1.2.5.5 时间线图表
1.3 常用的功能
1.3.1 模拟网速功能
在线上环境通常有些因为网速慢导致的bug,在本机无法重现,那时候就很抓瞎,如果嫌远程麻烦,推荐使用throttle。
支持对Bandwidth(带宽)、Utilistation(利用百分比)、Round-trip(往返延迟)、MTU(字节)进行配置,并且支持3G/4G或者其他网络模式。
!如果我们只想模拟指定网站的慢速网络,可以再勾选上图中的“Only for selected hosts”项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。
ADSL:属于DSL技术的一种,全称Asymmetric Digital Subscriber Line(非对称数字用户线路),亦可称作非对称数字用户环路。是一种新的数据传输方式。
VDSL:是一种非对称DSL技术,全称Very High Speed Digital Subscriber Line (超高速数字用户线路)。和ADSL技术一样,VDSL也使用双绞线进行语音和数据的传输。VDSL是利用现有电话线上安装VDSL,只需在用户侧安装一台VDSL modem。最重要的是,无须为宽带上网而重新布设或变动线路。
Isdn:综合业务数字网(Integrated Services Digital Network,ISDN)是一个数字电话网络国际标准,是一种典型的电路交换网络系统。在ITU的建议中,ISDN是一种在数字电话网IDN的基础上发展起来的通信网络,ISDN能够支持多种业务,包括电话业务和非电话业务。
1.3.2修改网络请求内容
Charles可以方便地提供网络请求的修改和重发功能。这也可以解决我们,为了修改谋其格请求,或者反复尝试不同参数的网络请求的需求。方法是:只需要在以往的网络请求上点击右键,选择 “Edit”/点击铅笔图标,即可创建一个可编辑的网络请求。如下所示:
我们可以修改该请求的任何信息,包括URL地址、端口、参数等,之后点击 “Execute” 即可发送该修改后的网络请求(如下图所示)。Charles 支持我们多次修改和发送该请求。
1.3.3 重复发送网络请求
(1)Repeat:此功能此功能对于测试同学特别有用,可以检验接口的健壮性。对于前端的价值是不需要刷新页面,只需要repeat请求,比如检验代理是否成功,修改请求后执行等。使用方法:选择请求后,右击Repeat就是重复发送一次请求。
(2)Advanced Repeat可以自定义重复次数和重复间隔,重复发送多次请求。可以来简单地测试服务器的并发处理能力,方法如下:我们在想打压的网络请求上(POST或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项。然后在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。(iteration:迭代次数,Concurrency:并发数,repeat为时间间隔)。
1.3.4 修改服务器返回内容
有些时候我们想让服务器返回一些指定的内容,方便我们调试一些特殊情况。例如列表页面为空的情况,数据异常的情况,部分耗时的网络请求超时的情况等。如果没有Charles,要服务器配合构造相应的数据显得会比较麻烦。这个时候,使用 Charles 相关的功能就可以满足我们的需求。
根据具体的需求,Charles提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以达到修改服务器返回内容的目的。这三者在功能上的差异是:
△Map功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。
△Rewrite功能适合对网络请求进行一些正则替换。
△Breakpoints功能适合做一些临时性的修改。
1.3.4.1 MAL
在Charles的菜单中,选择 “Tools”->”Map Remote” 或 “Map Local” 即可进入到相应功能的设置页面。
(1)map remote
对于Map Remote功能,我们需要分别填写网络重定向的源地址和目的地址,对于不需要限制的条件,可以留空。
(2)map local
1.3.4.2 Rewrite
1.3.5 断点功能(Breakpoints)
上面提供的Rewrite功能最适合做批量和长期的替换,但是很多时候,我们只是想临时修改一次网络请求结果,这个时候,使用 Rewrite 功能虽然也可以达到目的,但是过于麻烦,对于临时性的修改,我们最好使用 Breakpoints 功能。
Breakpoints,当指定的网络请求发生时,Charles 会截获该请求,这个时候,我们可以在 Charles 中临时修改网络请求的返回内容。
Charles能够断到发送请求前(篡改Request)和请求后(篡改Response)。
使用断点修改请求的弊端是,如果开发设置了请求超时时间,那么修改的速度慢了往往即使返回了也没有效果,所以实际测试中使用此方法的场景并不多。
这里以将我的券金额修改为13.00元为例:
(1) 针对接口右键选择"BreakPoints",这样这个接口就被加入到断点状态了;
(2)需要进一步修改断点的属性,可以在菜单栏"Proxy"–>"Breakpoints Settings"里进行添加删除或者修改,并且可以选择这个断点是在request还是response,还是两者都要。这里只是修改response
(3)刷新app界面,跳转到断点模版,这个时候你可以在对应状态情况下修改request或者response,然后点击下方按钮“Execute”。点开Edit Response界面,选择JSON格式,格式清晰,方便修改,直接在上面进行数据修改,改成你想要测试的数据,然后点击执行按钮
(4)再次刷新app界面,然后app返回的是新改的数据,根据返回数据测试客户端显示是否正确
1.3.6 查看连接本机charles代理的ip
这里可以看到连接自己charles代理的IP,针对某些不需要的/未知用户,点击remove即可
1.3.7 设置请求的黑名单
不想某些请求发起,直接返回404,可以用黑名单。选择Tools-Blacklist,设置如下图:
四 实战
mock实战1 -数据修改演示(rewrite:简单mock)
操作步骤如下:
修改返回body:股价变为正的