• 抓包分析 TCP 协议


    本文节选自霍格沃兹测试学院内部教材

    TCP 协议是在传输层中,一种面向连接的、可靠的、基于字节流的传输层通信协议。

    环境准备

    对接口测试工具进行分类,可以如下几类:

    • 网络嗅探工具:tcpdump,wireshark

    • 代理工具:fiddler,charles,anyproxyburpsuite,mitmproxy

    • 分析工具:curl,postman,chrome Devtool

    抓包分析TCP协议

    tcpdump

    tcpdump是一款 将网络中传送的数据包的“头”完全截获下来提供分析 的工具。它支持针对网络层、协议、主机、网络或端口的过滤,并提供
    and、or、not 等逻辑语句去掉无用的信息。

    让 tcpdump 时刻监听 443 端口,如果有异样就输入到 log 文件中

    sudo tcpdump port 443 -v -w /tmp/tcp.log
    

    利用这条命令,会把得到的报告放到目录 /tmp/tcp.log 中。

    常用参数 含义
    port 443 监听 443 端口
    -v 输出更加详细的信息
    -w 把数据写到 log 中

    wireshark

    wireshark 也是一款网络嗅探工具,它除了拥有 tcpdump
    功能,还有更多扩展功能,比如分析工具,但是在接口测试中,抓包过程往往都是在服务器进行,服务器一般不提供 UI 界面,所以 wireshark
    无法在服务器工作,只能利用 tcpdump 抓包生成 log,然后将 log 给 wireshark 导入使用,在有 UI 界面的客户端上进行分析。

    抓包分析TCP协议

    抓取一个 http 的 get 请求:

    1. 在百度上搜 mp3"http://www.baidu.com/s?wd=mp3"

    2. 用 tcpdump 截获这个 get 请求,并生成 log

    3. 用 wireshark 打开 tcpdump 生成的 log

    使用 wireshark 查看 log:

    log 的前几段信息是三次握手,原因是信道是不可靠的,在发送数据前,就必须确保信道稳定,而三次握手就像是下面这些操作:

    • 第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SENT 状态,等待服务器确认。

    • 第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(seq=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;

    • 第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED(TCP 连接成功)状态,完成三次握手。

    经过三次握手,就可以进一步交流,就像下面这样:

    结束交流时,也需要进行挥手:四次挥手:

    • 第一次挥手:客户端向服务器端发送一个 FIN,请求关闭数据传输。

    • 第二次挥手:服务器接收到客户端的 FIN,向客户端发送一个 ACK,其中 ack 的值等于 FIN+SEQ

    • 第三次挥手:服务器向客户端发送一个 FIN,告诉客户端应用程序关闭。

    • 第四次挥手:客户端收到服务器端的 FIN,回复一个 ACK 给服务器端。其中 ack 的值等于 FIN+SEQ

    注意: 一个请求可能分为多个包,一个数据也是这样,于是在 wireshark 会看到很多包。

    ** _
    来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
    QQ交流群:484590337
    公众号 TestingStudio
    点击获取更多信息

  • 相关阅读:
    Linux Shell常用shell命令
    shell ls
    [转]推荐一些不错的计算机书籍
    What does it mean when you assign [super init] to self?
    保存,读取与多任务处理
    程序媛去过的地方
    读取pcap文件,过滤非tcp包,获取IP及tcp端口信息
    IM实现联系人及联系人分组的数据库设计
    【原创】校园网用户,1个账号2个笔记本上网,Ad hoc无线连网应用
    【openfire插件开发】群组聊天中的中介者模式
  • 原文地址:https://www.cnblogs.com/hogwarts/p/15769657.html
Copyright © 2020-2023  润新知