• 接口协议抓包与分析


    网络基础

    1、七层网络模型与常见协议
    bd8dc0a2b4e00c5ad7b3aff1db345b7d.png
    常见网络协议
    2、网络架构图
    f9fdbe01bdfb94a78e1dad3e1238f54a.png
    网络架构
    3、互联网通讯协议架构
    a4fff5a28a80634a2b7abdb18e4bf41d.png
    通讯协议架构
    4、TCP / UDP
    • TCP:面向连接、错误重传、拥塞控制、适用于可靠性高的场景

    • UDP:不需要提前建立连接,实现简单,适用于实时性高的场景

    5、Restful 软件架构风格

    借助于 http 协议的基本请求方法代表资源的状态切换

    • get:获取资源

    • post:新增或更新资源

    • put:更新资源

    • delete:删除资源

    6、RPC 协议

    Remote Procedure Call,以本地调用的方式实现远程执行

    • Dubbo(阿里)

      • java 上高性能 RPC 协议,Apache 开源项目,由阿里捐赠

      • 底层应用层协议支持 dubbo 缺省 tcp 协议、http、hessian、thrift、grpc 等

      • Dubbo 接口本质上也是属于 TCP/IP 技术栈

    • gRPC(Google)

      • 高性能通用 RPC 框架,基于 Protocol Buffers(Google)

      • PB 是一个语言中立、平台中立的数据序列化框架,谷歌开源项目

    • Thrift(Facebook)

      • 与 gRPC 类似的多语言 RPC 框架,Apache 开源项目

    协议分析工具

    • 网络监听(偏向于网络层)

      • TcpDump(命令行) + WireShark

    • 代理 Proxy(代理应用层协议分析)

      • Charles(全平台)、安全测试 burpsuite(全平台 java)

      • mitmproxy(自动化测试 python)

      • fiddelr(windows)、AnyProxy(全平台)

    • 协议客户端工具(主动发起请求)

      • curl(命令行)

      • postman(Chrome 插件&客户端 全平台)

    1、网络监听

    使用场景:用 tcpdump 抓包保存以后,使用 wireshark 界面工具分析。

    tcpdump
    $ sudo tcpdump -Al host www.baidu.com
    • 参数

      • -x 十六进制展示

      • -w file 保存文件

    • 表达式

      • ip tcp 协议

      • host 主机名

      • port 80 端口号

      • src(来源)& dst(目的地) 过滤

      • and or () 逻辑表达式

    wireshark

    wireshark Download[1]

    界面展示ff80725eb6a8f0de163384906fb33b84.png

    示例:请求百度后, TCP 连接建立过程
    $ sudo tcpdump host www.baidu.com -w /tmp/tcpdump.log
    # 需要输入电脑密码,开启新窗口发送请求
    $ curl http://www.baidu.com
    # 停止 tcpdump
    # 启动 wireshark,点击文件夹图标,打开 tcpdump.log

    三次握手与四次挥手

    ae194d4b1c3501b789e5157b1c96b71a.png
    image-20211130144521195
    2、使用 chrome 开发者工具分析网络请求
    • Elements:抓取页面元素,做自动化测试经常使用

    • Console:控制台,可以在页面上与 JavaScript 交互

    • Sources:源代码面板,可以设置断点调试 JavaScript

    • Network:网络面板,用于 web 抓包,记录了每条网络操作的相关信息

    • Performance:录制页面性能数据

    • Memory:排查代码内存分配问题

    • Application:应用面板,使用资源面板检查加载的所有资源,包括 IndexedDB 与 Web SQL 数据库,本地和会话存储,cookie,应用程序缓存,图像,字体和样式表

    • Security:安全面板,用于调试混合内容、证书等问题

    • Lighthouse:用于提高网页质量,能够针对性能、可访问性、渐进式 Web 应用等进行审核

    下图为 network 面板的功能注解。

    2d4aeba6d1db92218763fa9f341e8945.png
    Chrome dev tools
    3、curl 常见用法
    # get
    $ curl $url | jq
    # post
    $ curl -d '$body' $url
    # proxy 代理网络请求
    $ curl -x 'http://localhost:8080' $url
    • -H:消息头设置

    • -u:username:password 用户认证

    • -d:要发送的 post 数据,@file 表示来自于文件

    • --data-urlencode 'page_size=50':对内容进行编码

    • -G:把 data 数据当成 get 请求的参数发送,常与 --data-urlencode 结合使用

    • -o:写文件,用于下载

    • -x:代理 http、socks5

    • -v:verbose 打印更详细的日志

    • -s:关闭一些提示输出

    通过 jq[2] 可以格式化 json 的输出内容,更加优雅。

    4、Charles
    • 过滤请求:Proxy - Recording Settings

    • 弱网设置:Proxy - Throttle Settings

    • 断点请求:Proxy - Breakpoint Settings

    • 映射请求:Tools - Map Remote&Local

    • 重写请求:Tools - Rewrite

    5、mitmproxy

    演示:当请求百度域名的时候,会自动打印信息。

    import mitmproxy.http
    from mitmproxy.tools.main import mitmdump
    
    class Events:
        def request(self, flow: mitmproxy.http.HTTPFlow):
            """
                The full HTTP request has been read.
            """
            flow_url = flow.request.url
            if "baidu" in flow_url:
                # 还可以做其他操作,比如修改搜索词 等
                print(f"{'-'*10} 哈哈哈 {'-'*10}")
    
    addons = [
        Events()
    ]
    
    
    if __name__ == '__main__':
    # 使用 debug 模式启动 mitmdump
    # 端口需要使用字符串
    mitmdump(['-p', '8080', '-s', __file__])

    不仅可以代理请求,最重要的是可以自定义脚本进行二次开发,实现很多代理工具做不到的事情。

    参考资料

    [1]

    wireshark download: https://wireshark.en.softonic.com

    [2]

    jq: https://github.com/stedolan/jq

    end

  • 相关阅读:
    图片展示,带分页
    miniui动态合并datagrid列
    使用webcam和video插件/华为云播放插件,实现视频播放及拍照上传功能
    Java实现excel导出(内容循环多个)
    C# 图片与Base64互转
    C#中将字符串转成 Base64 编码 (加密--解密)
    ASP.NET导出Excel之二
    利用Aspose转PDF
    ASP.NET视频播放
    Oracle存储过程导入,判断已有数据更新,没有的数据导入,统计导入成功与失败数,返回一个表
  • 原文地址:https://www.cnblogs.com/finer/p/15790960.html
Copyright © 2020-2023  润新知