当前位置: 首页 > news >正文

抓包分析 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 会看到很多包。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

相关文章:

  • 反转一个单链表
  • 推荐一款自动转换Python代码为HTML界面的爆款GUI库!
  • 【MySQL】学习多表查询和笛卡尔积
  • 2402C++,C++26包索引
  • C#,数值计算,矩阵的行列式(Determinant)、伴随矩阵(Adjoint)与逆矩阵(Inverse)的算法与源代码
  • ES实战--wildcard正则匹配exists过滤字段是否存在
  • JavaScript:JSON、三种包装类
  • 在SpringBoot中@PathVariable与@RequestParam的区别
  • IO线程-day1
  • compile error ESP32cam.h no such file or directory
  • sql常用语句小结
  • 服务器防火墙设置教程
  • SQL查询数据是否存在
  • 5G网络eMBB、uRLLC、mMTC
  • 【手写数据库toadb】数据字典缓存的实现方法和接口分享,面向对象设计思想,接口单一化
  • Akka系列(七):Actor持久化之Akka persistence
  • angular学习第一篇-----环境搭建
  • C++类的相互关联
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Elasticsearch 参考指南(升级前重新索引)
  • iOS | NSProxy
  • maya建模与骨骼动画快速实现人工鱼
  • Mysql数据库的条件查询语句
  • Sass 快速入门教程
  • vue-cli在webpack的配置文件探究
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 两列自适应布局方案整理
  • 目录与文件属性:编写ls
  • 你真的知道 == 和 equals 的区别吗?
  • 前端面试题总结
  • 如何设计一个比特币钱包服务
  • 通过git安装npm私有模块
  • 通过几道题目学习二叉搜索树
  • 移动端唤起键盘时取消position:fixed定位
  • 优化 Vue 项目编译文件大小
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • Hibernate主键生成策略及选择
  • k8s使用glusterfs实现动态持久化存储
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #{}和${}的区别?
  • #define、const、typedef的差别
  • #每天一道面试题# 什么是MySQL的回表查询
  • #前后端分离# 头条发布系统
  • #图像处理
  • (10)STL算法之搜索(二) 二分查找
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (算法设计与分析)第一章算法概述-习题
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)