Fiddler的深入应用

发表于:2019-11-08 11:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Lethe    来源:搜狗测试

分享:
  项目背景:
  近期在做一款app测试,为保护用户隐私,客户端对请求进行整体加密后再发送,途径加密墙服务器进行解密,再发送给指定服务器,逻辑简图如下:
  测试过程:
  我们需要对功能进行容错测试,修改返回的response;
  需要进行网络测试,对请求进行delay延时;
  需要进行代理测试服务器,给真实请求配置ip。
  以上这些操作都需要针对该功能的明文请求进行操作,但客户端发出来的加密请求,我们无法解密,阻碍了测试进行,怎么办呢?
  解决问题:
  我们平时测试明文请求时,只需要给客户端连接fiddler代理就可以对请求进行操作处理了,那么我们是不是可以给加密墙服务器配置fiddler呢?在开发大佬帮助下,给出了如下方案:
  目的:
  在加密墙服务器和目标服务器之间搭设fiddler,通过该fiddler进行数据查询、修改等操作;
  操作步骤:
  在客户端和加密墙服务器之前搭设fiddler;
  在fiddler中通过urlreplace将域名后面拼接当前fiddler的ip和端口号;
  加密墙服务器修改nginx配置,将该类请求的明文请求发送到对应ip+端口号的fiddler服务器上;
  fiddler再将解密后的请求发送到对应的线上服务器。
  我们这里主要讨论下步骤b中的操作
  Fiddler修改请求有两种方法:
  1、 在fiddler命令行输入:
 urlreplace xxxx.com xxxx.com/jiemi?ip=a&port=b
  2、 在FiddlerScript中,找到OnBeforeRequest方法,在其尾部添加代码如下:
   If(oSession.url.indexOf(‘xxxx.com’)>-1){
  oSession.url = oSession.url.Replace(‘xxxx.com’,’xxxx.com/jiemi?ip=a&port=b’)
  }
  第一种方法只有当次启动fiddler有效,重新启动后就会失效,而第二种方法会一直生效。
  到这里问题就全部解决了,但是leader看过后立刻提出了几个改进点,其中一个是replace的时候ip值是不是可以变成动态获取,而不是需要每个人手动添加呢。
  这样我们就要继续分析下FiddlerScript了,下面通过三个问题来进行分析:
  一、FiddlerScript是用什么语言编写运行的?
  通过网上调查了解到FiddlerScript的编码是C#,C#支持的系统库它也支持。
  二、FiddlerScript有哪些语法?
  上面说到C#支持的系统库FiddlerScript也都支持
  同时FiddlerScript自身提供了一些库,在ScriptEditer右侧可以看到库及相应方法:
  获取本机IP的方法需要调用System.Net.Dns.GetHostEntry()的方法
  三、如何进行代码调试?
  JAVA有log.d(),Python有print (),同样Fiddler也有调试方法:
  FiddlerObject.log()
  使用方法如下:
   import System.Net;
  var hostname = Dns.GetHostName();
  var iphost = Dns.GetHostEntry(hostname).AddressList[1];
  FiddlerObject.log(iphost);
  }
  配置完毕后,在fiddler的右侧tab:log中查看调试结果。
  本次分享就到这儿,希望对大家使用Fiddler进行测试的过程有所帮助。

     本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号