当前位置:网站首页>技术分享 | 抓包分析 TCP 协议
技术分享 | 抓包分析 TCP 协议
2022-07-06 12:57:00 【Hogwarts_测试】
本文节选自霍格沃兹测试开发学社内部教材
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 会看到很多包。
边栏推荐
- Reflection operation exercise
- Select data Column subset in table R [duplicate] - select subset of columns in data table R [duplicate]
- js 根据汉字首字母排序(省份排序) 或 根据英文首字母排序——za排序 & az排序
- No Yum source to install SPuG monitoring
- 3D人脸重建:从基础知识到识别/重建方法!
- for循环中break与continue的区别——break-完全结束循环 & continue-终止本次循环
- In JS, string and array are converted to each other (I) -- the method of converting string into array
- Laravel notes - add the function of locking accounts after 5 login failures in user-defined login (improve system security)
- 面试官:Redis中有序集合的内部实现方式是什么?
- Seven original sins of embedded development
猜你喜欢
【力扣刷题】32. 最长有效括号
全网最全的知识库管理工具综合评测和推荐:FlowUs、Baklib、简道云、ONES Wiki 、PingCode、Seed、MeBox、亿方云、智米云、搜阅云、天翎
Opencv learning example code 3.2.3 image binarization
Why do job hopping take more than promotion?
Reviewer dis's whole research direction is not just reviewing my manuscript. What should I do?
[interpretation of the paper] machine learning technology for Cataract Classification / classification
Reinforcement learning - learning notes 5 | alphago
Data Lake (VIII): Iceberg data storage format
3D face reconstruction: from basic knowledge to recognition / reconstruction methods!
SAP UI5 框架的 manifest.json
随机推荐
对话阿里巴巴副总裁贾扬清:追求大模型,并不是一件坏事
1500萬員工輕松管理,雲原生數據庫GaussDB讓HR辦公更高效
The use method of string is startwith () - start with XX, endswith () - end with XX, trim () - delete spaces at both ends
##无yum源安装spug监控
R语言做文本挖掘 Part4文本分类
El table table - get the row and column you click & the sort of El table and sort change, El table column and sort method & clear sort clearsort
R language for text mining Part4 text classification
Nodejs tutorial expressjs article quick start
js通过数组内容来获取数组下标
[redis design and implementation] part I: summary of redis data structure and objects
Thinking about agile development
MLP (multilayer perceptron neural network) is a multilayer fully connected neural network model.
@GetMapping、@PostMapping 和 @RequestMapping详细区别附实战代码(全)
全网最全的新型数据库、多维表格平台盘点 Notion、FlowUs、Airtable、SeaTable、维格表 Vika、飞书多维表格、黑帕云、织信 Informat、语雀
PG basics -- Logical Structure Management (transaction)
js中,字符串和数组互转(二)——数组转为字符串的方法
Ravendb starts -- document metadata
[MySQL] basic use of cursor
【mysql】触发器
What is the problem with the SQL group by statement