• 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 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

  • 相关阅读:
    bzoj1797
    bzoj1266
    bzoj1497
    bzoj1412
    bzoj3156
    JSOI2014第三轮总结
    bzoj1855
    bzoj1044
    codeforces 371D
    codeforces 371B
  • 原文地址:https://www.cnblogs.com/RainBol/p/12486417.html
Copyright © 2020-2023  润新知