zoukankan      html  css  js  c++  java
  • Fiddler抓包工具的使用

    Fiddler简介

    Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统,并且能使用.net语言进行扩展,你对HTTP协议越了解,你就越能掌握Fiddler的使用方法。你越使用Fiddler,就越能帮助你了解HTTP协议。Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。

    Fiddler的工具原理:
    Fiddler是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。

    HTTP协议介绍

    协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器

    HTTP协议的主要特点可概括如下:
    1.支持客户/服务器模式。
    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    HTTP协议之请求:
    http请求由三部分组成,分别是:请求行、消息报头、请求正文

    请求方法(所有方法全为大写)有多种,各个方法的解释如下:
    GET 请求获取Request-URL所标识的资源
    POST 在Request-URL所标识的资源后附加新的数据
    HEAD 请求获取由Request-URL所标识的资源的响应消息报头
    PUT 请求服务器存储一个资源,并用Request-URL作为其标识
    DELETE 请求服务器删除Request-URL所标识的资源
    TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECT 保留将来使用
    OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
    GET方法 在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET/form.html HTTP/1.1(CRLF)
    POST方法 要求被请求服务器接受附在请求后面的数据,常用于提交表单

    HTTP协议介绍

    HTTP协议之响应:
    在接收和解释请求消息后,服务器返回一个HTTP响应消息。
    HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
    状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
    1xx:指示信息--表示请求已接收,继续处理
    2xx:成功--表示请求已被成功接收、理解、接受
    3xx:重定向--要完成请求必须进行更进一步的操作
    4xx:客户端错误--请求有语法错误或请求无法实现
    5xx:服务端错误--服务器未能实现合法的请求
    常见状态代码、状态描述、说明:
    200 OK //客户端请求成功
    400 Bad Request //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden //服务器收到请求,但是拒绝提供服务
    404 Not Found //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error //服务器发生了不可预期的错误
    503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    Fiddler抓包解析

    1、使用fiddler抓包后,会话列表面板各项内容

    HTTP Request的顺序,从1开始,按照页面加载请求的顺序递增。

    Result:HTTP响应的状态 Protocol:请求使用的协议(如HTTP/HTTPS)
    HOST:请求地址的域名 URL:请求的服务路径和文件名,也包含GET参数
    BODY:请求的大小,以byte为单位 Content-Type:请求响应的类型
    Cashing:请求的缓存过期时间或缓存控制header的值
    Process:发出此请求的Windows进程及进程ID
    Comments:用户通过脚本或者菜单给此session增加的备注
    custom:用户可以通过脚本设置的自定义值

    Fiddler右侧面板使用介绍

    Statistics页签:
    通过该页签,用户可以通过选择多个会话来得到这几个会话的总的信息统计,比如多个请求和传输的字节数。
    选择第一个请求和最后一个请求,可获得整个页面加载所消耗的总体时间。从条形图标中还可以分别出哪些请求耗时最多,从而对页面的访问进行访问速度优化

    inspwctors页签:
    它提供headers、textview、hexview、Raw等多种方式查看单条http请求的请求报文的信息,它分为上下两部分:上部分为HTTP Request展示,下部分为HTTP Response展示

    AutoResponse页签:
    Fiddler最实用的功能,它可以抓取在线页面保存到本地进行调试,大大减少了在线调试的困难,可以让我们修改服务器端返回的数据,例如让返回都是HTTP404或者读取本地文件作为返回内容。

    composer页签:
    支持手动构建和发送HTTP,HTTPS和FTP请求,我们还可以从web session列表中拖拽session,把它放到composer选项卡中,当我们点击Execute按钮,把请求发送到服务器端。

    log页签:打印日志

    Filters页签:
    过滤器可以对左侧的数据流列表进行过滤,我们可以标记、修改或隐藏某些特征的数据流。

    Timeline页签:
    时间轴,也称为Fiddler的瀑布图,展示网络请求时间的功能。每个网络请求都会经历域名解析、建立连接、发送请求、接受数据等阶段。把多个请求以时间作为X轴,用图标的形式展现出来,就形成了瀑布图。在左侧会话窗口点击一个或多个(同时按下Ctrl键,Timeline便会显示指定内容从服务器端传输到客户端的时间)

    Fiddler命令行工具

    Fiddler的左下角有一个命令行工具叫做QuickExec,允许你直接输入命令。
    常见的命令有:
    help:打开官方的使用页面介绍,所有的命令都会列出来
    cls:清屏(ctrl+x也可以清屏)
    select:选择会话的命令,选择所有相应类型,select image select css select html
    ?sometext:查找字符串并高亮显示查找到的会话列表的条目

    size:选择请求响应大小小于size字节的会话
    =status/=method/@host:查找状态、方法、主机相对应的session会话
    quit:退出fiddler
    Bpafter,Bps,bpv,bpm,bpu
    这几个命令主要用于批量设置断点
    Bpafter xxx:中断URL包含指定字符的全部session响应
    Bps xxx:中断HTTP响应状态为指定字符的全部session响应
    Bpv xxx:中断指定请求方式的全部session响应
    Bpm xxx:中断指定请求方式的全部session响应。等同于bpv xxx
    Bpu xxx:与bpafter类似

    Fiddler应用

    1、手机抓包
    1.启动Fiddler,打开菜单栏中的Tools>Fiddler Options,打开“Fiddler Options”对话框
    2.在“Fiddler Options”对话框切换到“Connections”选项卡,然后勾选“Allow romote computers to connect”后面的复选框,然后点击“OK”按钮
    3.在本机命令行输入:ipconfig,找到本机的ip地址
    4.打开android设备的“设置” → “WLAN”,找到你要连接的网络,在上面长按,然后选择“修改网络”,弹出网络设置对话框,然后勾选“显示高级选项”
    5.在“代理”后面的输入框选择“手动”,在“代理服务器主机名”后面的输入框输入电脑的ip地址,在“代理服务区端口”后面的输入0框输入8888,然后点击“保存”按钮
    6.然后启动android设备中的浏览器,访问百度的首页,在fiddler中可以看到完成的请求和响应数据

    备注:如果是Android模拟器中ip要填写10.0.2.2,genymotion模拟器中ip要填写:10.0.3.2,端口就是burp或者fiddler监听的端口

    2、过滤功能
    选择Filters页签,勾选use Filters
    勾选Request Headers中的Hide if url contains过滤项,在里面输入:
    REGEX:{?insx}/[^?/].(css|ico|jpg|png|gif|bmp|wav)(?.)?$
    REGEX:表示启动正则表达式
    (?insx)设置正则解释的规则,忽略大小写等
    此表达式表示过滤掉url中包括css,ico,jpg等后缀的请求

    勾选Request Headers中的show only if URL contains,在里面输入REGEX:(?insx)..?baidu.com/home.
    只显示:baidu.com/Home

    Fiddler过滤指定域名
    第二个选项是只监控以下网址,如只监控百度,在下面的输入框里填上
    www.baidu.com
    "No Host Filter"不设置hosts过滤
    "Hide The Following Hosts"只显示过滤到的域名
    "Flag The Following Hosts"标记过滤到的域名

  • 相关阅读:
    ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
    循环读取list 的几种方法?
    jQuery里$(this)和this的区别在哪?
    Hibernate多对多双向关联需要注意的问题(实例说话)
    window.open()用法说明
    struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
    页面中的删除确认(ajax)、输入框中确认信息是否可用(ajax)的jquery代码
    理解ValueStack的基本机制 OGNL表达式
    Struts2中的ModelDriven机制及其运用
    mySQl数据库中不能插入中文的处理办法
  • 原文地址:https://www.cnblogs.com/TD1900/p/11988555.html
Copyright © 2011-2022 走看看