抓包分析 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 请求:

在百度上搜 mp3 http://www.baidu.com/s?wd=mp3
用 tcpdump 截获这个 get 请求,并生成 log
用 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 会看到很多包。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末领取】


     【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图+全套资料】


一、Python编程入门到精通

二、接口自动化项目实战 

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具

八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/68185.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

19.正则表达式

19.1什么是正则表达式 ●正则表达式( Regular Expression) 是用于匹配字符串中字符组合的模式。在JavaScript中, 正则表达式也是对象 ●通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式 ●正则表达式在JavaScript中的使用场景: …

ubuntu 20.0.4 搭建nvidia 显卡环境

一、安装docker 1、安装dokcer sudo apt install docker.io2、docker 添加到用户组 创建docker用户组 sudo groupadd docker添加当前用户加入docker用户组 sudo usermod -aG docker ${USER}重启docker服务 sudo systemctl restart docker切换或者退出当前账户再从新登入 …

【力扣每日一题】2023.8.15 字符中的查找与替换

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目很长,简而言之就是检查字符串中对应索引的位置是否有特定的字符串,如果有,那么替换,返…

选择最适合自己的笔记本

选择最适合自己的笔记本电脑 一、了解笔记本品牌一线品牌准一线品牌二线品牌三线品牌 二、笔记本入手渠道笔记本入手渠道 三、根据需求选择机型使用需求1.日常使用2.商务办公、财务3.轻度剪辑、ps4.代码5.创意设计6.游戏 四、笔记本电脑配置如何选1.cpu2.显卡(GPU&a…

miniExcel 生成excel

一、nuget dotnet add package MiniExcel --version 1.31.2 二、新建表及数据 ExampleProducts 三、这里我用了Dapper.Query方法 读取excel public virtual async Task<IActionResult> Anonymous(){try{//using (var connection _dbContext.GetDbConnection())//{//…

Java接口压力测试—如何应对并优化Java接口的压力测试

导言 在如今的互联网时代&#xff0c;Java接口压力测试是评估系统性能和可靠性的关键一环。一旦接口不能承受高并发量&#xff0c;用户体验将受到严重影响&#xff0c;甚至可能导致系统崩溃。因此&#xff0c;了解如何进行有效的Java接口压力测试以及如何优化接口性能至关重要…

【Linux初阶】system V消息队列 + system V信号量

文章目录 一、system V消息队列&#xff08;了解&#xff09;二、system V信号量&#xff08;了解&#xff09;1.信号量是什么2.临界资源和临界区3.互斥4.为什么要信号量 三、IPC资源的组织方式结语 一、system V消息队列&#xff08;了解&#xff09; 消息队列提供了一个从一…

dataframe resample时间重采样的坑

无论日期列不在index&#xff0c;index一定要按顺序&#xff0c;否则结果会和实际不一致。reset_index

LVGL学习笔记 30 - List(列表)

目录 1. 添加文本 2. 添加按钮 3. 事件 4. 修改样式 4.1 背景色 4.2 改变项的颜色 列表是一个垂直布局的矩形&#xff0c;可以向其中添加按钮和文本。 lv_obj_t* list1 lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1); 部件包含&…

C++——vector介绍及其简要模拟实现

vector的介绍 此主题介绍转载自(https://cplusplus.com/reference/vector/vector/) 1.vector是一个表示可变大小数组的序列容器 2.vector同数组一样&#xff0c;采用连续存储空间来存储元素&#xff0c;这样可以用下标来对vector中的元素进行访问&#xff0c;但是vector的大…

image has dependent child images

问题&#xff1a;很多none的镜像无法被删除 解决过程&#xff1a; 1、通过 docker image prune -f 提示可删除为 0 2、直接进行删除报错&#xff1a; docker rmi 8f5116cbc201Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - im…

Jmeter进阶使用:BeanShell实现接口前置和后置操作

一、背景 我们使用Jmeter做压力测试或者接口测试时&#xff0c;除了最简单的直接对接口发起请求&#xff0c;很多时候需要对接口进行一些前置操作&#xff1a;比如提前生成测试数据&#xff0c;以及一些后置操作&#xff1a;比如提取接口响应内容中的某个字段的值。举个最常用…