fiddler笔记

Fiddler

  抓包工具其实就是开启了一个代理,我们发送的http(s)请求到网络中时先必须要经过fiddler,当从网络返回的数据也要经过fiddler再到我们电脑上,常常我们说图片不显示了,这个按钮点不了,请求一直在转圈,作为一个逼格高的测试,这种low的问题就不要发生在我们身上了,一定要去抓包定位到关键问题,这样才不会被开发同学欺负

原理

  fiddler接到客户端的https请求,fiddler将请求转发给服务器
  服务器生成公钥证书,返回给fiddler;fiddler拦截下真的公钥证书,并生成伪造的公钥证书给客户端;
  客户端使用伪造的公钥证书加密共享密钥发送给fiddler,fiddler使用伪造的私钥解密获取共享密钥
  fiddler将解密后的共享密钥,使用真正的公钥加密发送给服务器端,服务器使用共享密钥与fiddler通信
  fiddler使用共享密钥与客户端通信
  https://blog.csdn.net/wangjun5159/article/details/52198842

有关抓包灰色锁

  https://blog.csdn.net/wangjun5159/article/details/54142016

如何手机抓包?

  PC就没什么好说的了,直接请求能抓取了,手机的话需要在Tools-Options-Connections,如下图设置,第一次需要点击actions,下载证书,默认8888端口,你可以改别的,手机的话需要和pc用同一个wifi路由,并且在wifi中设置手动-输入ip地址(cmd输入ipconfig查询局域网ip地址),输入端口号(前面是8888),第一次使用前需要用手机请求下http://ip地址:端口,安装证书后面就不需要了,之后使用app或者浏览器就可以在fiddler看见请求了

 

 

 

如何web端过滤请求?

  当我们在测试手机的时候一直有web端莫名其妙的请求来干扰我们,下面点箭头把Capturing点成白色就行了,也可以在File-Capture Traffic 或者按f12

 

 如何过滤其他浏览器的请求?

  当我们在测试一个网页时会被其他页面请求的数据干扰,如下图,可以在两个地方进行设置,下方可以对请求进行过滤,如设置web browers之后手机的请求就可以过滤掉

  而上方的Any Process操作需要选择一个浏览器页面,鼠标点击光标会变成十字,再将光标拖到你想要的页面上,比如我截取了微信的浏览器就变成这样了,这样做只有这个页面的请求会生效,chrome请求会被过滤掉.再次点击就可以取消掉了

 

其他过滤

  当然过滤更多可以在filters能中,可以自定义过滤

 

 

添加ip地址

  Rules->Customize Rules,Ctrl+F查找“static function Main(),在方法中添加FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP"); 之后拖动滚动条查看

 

定制请求颜色

  Rules->Customize Rules,Ctrl+F查找OnBeforeRequest,在方法中添加

        if (oSession.uriContains("baidu")) 
            {oSession["ui-color"]="purple";
        }

  我这边测试只要请求有baidu字符串的都会变成紫色,看看效果,是不是一眼就能定位到我所需要的请求了呢

 

请求返回数据乱码

 

   我们总是发现请求后数据都被压缩了,需要点击才能解压,自动解压需要view-show toolbal 下面出来点下就行了

 

 

请求数据拦截

  需要辅助工具,一套api接口,postman

  我这边使用flask模拟登陆的mock

@server.route('/test', methods=['post', 'get', 'delete', 'put'])
def my_test():
    if request.method.lower() == 'post':
        username = request.values.get('username')
        password = request.values.get('password')
        if username == 'rainbol' and password == '123456':
            res = {'msg': '登录成功'}

        else:
            res = {'msg': '用户名或者密码错误'}
    else:
        res = {'msg': '请求错误'}

    return json.dumps(res, ensure_ascii=False)

 

  我们使用postman的get请求一下接口模拟登录,此时没有传body参数

 

  我们需要通过fiddler拦截这段请求来促使登录成功,我们来看一下

  Rules -> Automatic Breakpoints -> Before request (快捷键f11)  :表示在请求之前拦截请求

  当开启后下方会出现这样一个标志,所有的请求都会被拦截,除非你关闭或者点击run to completion来单独通过该请求

 

  首先因为来先是get请求,在inspectors的raw,修改数据源,改成POST

 

   在webforms中传参填写

 

 

  点击run to completion通过请求,请求返回登录成功

 

 

 

 请求数据篡改

  Rules -> Automatic Breakpoints -> After reponses (快捷键 alt + f11)  :表示在请求之后拦截请求

   同理在返回结构中修改数据源,之后点击run to completion

 

 克隆请求

  按住请求拖拽到composer中,这样就克隆好了,可以任意修改数据,点击execute测试克隆的请求

 

 

 

版权声明:本文原创发表于 博客园,作者为 RainBol 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

posted @ 2020-03-13 14:47  RainBol  阅读(190)  评论(0编辑  收藏  举报
Live2D