接口协议之抓包分析 TCP 协议

news/2024/11/23 0:42:38/

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

环境准备

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

  • 网络嗅探工具:tcpdump,wireshark

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

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

抓包分析TCP协议

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

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

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

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

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

抓取一个 http 的 get 请求:

1.在百度上搜 mp3"mp3_百度搜索"

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

3.用 wireshark 打开 tcpdump 生成的 log

使用 wireshark 查看 log:

1080×86 95.5 KB

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 连接成功)状态,完成三次握手。
    经过三次握手,就可以进一步交流,就像下面这样:

1080×301 360 KB

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

1080×103 120 KB

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

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

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

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


http://www.ppmy.cn/news/11236.html

相关文章

盘点| 能够实现小程序开发提效的框架/工具有这些

近年来,为了研发效率的提升,技术高频革新,开发者们纷纷表示:“好是好,就是快学不动了!”。开发者们在不断学习新语言、框架、工具等内容的同时,也在担心所学是否真正有用。而小程序其实能够帮助…

Elasticsearch:运用 Go 语言实现 Elasticsearch 搜索 - 8.x

在我之前的文章 “Elasticsearch:Go 客户端简介 - 8.x”,我对 Elasticsearch golang 客户端做了一个简单的介绍。在今天的这篇文章中,我将详细介绍如何使用这个客户端来一步一步地连接到 Elasticsearch,进而创建索引,搜…

杰卡德相似度(Jaccard)详解及在UserCF中的应用

1、杰卡德相似度(Jaccard) 这个是衡量两个集合的相似度一种指标。 两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示 另一种表示的方法: jaccard系数衡量维度相似性 jaccard系数很…

Java调用WebService接口之利用hutool工具包实现

最近要对接金蝶财务系统,对方提供了一个webService接口。而且测试接口地址还是内网的,每改一处代码都要部署堡垒机去测试,光是一个登录接口就花了我两天时间很是无语(主要是接口文档地址不会看) 接口的地址大就是这种…

计算机专业实训报告总结

在日新月异的计算机行业里,计算机应用专业的学生参加实习是有着极其重要的意义的。今天给你介绍的是计算机专业实训报告总结,希望对大家有所帮助。 随着计算机技术的发展,在 Inter 飞速发展的今天,互联网成为人们快速获取、发布和…

Java基础知识复习

文章目录复习1. Java编译和运行2. Java运行环境3. Java注释4. Java中的打印5. 数据类型整形浮点型字符类型字节类型布尔类型数据类型转换强制类型转换隐式类型转换小结6. 变量命名规范7. 运算符算数运算符逻辑运算符移位运算符关系运算符8. switch9. 方法方法的重载可变参数变程…

【数据结构】栈及其经典面试题详解

目录前言一、栈的介绍二、数据类型重定义三、栈的结构四、栈中的常见操作五、测试栈六、栈的常见面试题前言 前面学习的线性表中包含顺序表和链表,这两种数据结构允许在任意位置进行插入和删除,那么有没有一种数据结构是不能在任意位置进行插入删除&…

SpringBoot在使用测试的时候是否需要@RunWith?

我们在使用SpringBoot进行测试的时候一般是需要加两个注解: SpringBootTest 目的是加载ApplicationContext,启动spring容器。 RunWith 是一个测试启动器,可以加载SpringBoot测试注解让测试在Spring容器环境下执行。如测试类中无此注解&#…