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

Linux: tcpdump抓包示例

文章目录

  • 1. 前言
  • 2. TCP 状态机
  • 3. tcpdump 抓包示例
    • 3.1 抓连接握手包:三次握手
    • 3.2 抓数据包示例
    • 3.3 抓终结连接:四次挥手
  • 4. 参考资料

1. 前言

限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。

2. TCP 状态机

在这里插入图片描述

3. tcpdump 抓包示例

3.1 抓连接握手包:三次握手

在这里插入图片描述
上图所示 TCP连接建立过程 如下:

1. 客户端 发送 序号为 x 的 SYN 请求给服务端;
2. 服务端 以 序号为 y 的 SYN 请求、确认号为 x+1 的 ACK 回应客户端的 SYN 请求;
3. 客户端 再回应 服务端 序号为 y 的 SYN 请求一个 ACK,ACK 的 序列号为 x+1, 确认号为 y+1 。

应该了解的是:包的序列号 seq 是 服务端 和 客户端 独自维护的,而回应给对端的 ack 的编号,是对端发送过来包的 seq + 1 。看实际 TCP连接建立过程 抓包例子(只截取了握手信息):

# tcpdump -xx -vvv -A -S tcp and host 192.168.10.211
[  162.969323] device eth0 entered promiscuous mode
tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
192.168.10.211.56925 > 192.168.10.198.8000: Flags [S], cksum 0xe487 (correct), seq 2305192361, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
192.168.10.198.8000 > 192.168.10.211.56925: Flags [S.], cksum 0x738b (correct), seq 3370362890, ack 2305192362, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 5], length 0
192.168.10.211.56925 > 192.168.10.198.8000: Flags [.], cksum 0x8f38 (correct), seq 2305192362, ack 3370362891, win 8212, length 0

从上面看到,有两台机器,IP 分别为 192.168.10.211192.168.10.198192.168.10.198 为 服务端,192.168.10.211 为客户端。> 指示了数据通信方向,如 192.168.10.211.56925 > 192.168.10.198.8000 表示 192.168.10.211192.168.10.198 发送数据。分析下抓包数据:

1. `Flags [S]` 标记 客户端 向服务端 发起连接 `SYN` 请求,即前面图中 TCP连接过程 中的 步骤1;
2. `[S.]` 标记 服务端 对 客户端 `SYN` 请求回应的 `ACK`,以及服务端发往客户端 SYN 请求,即前面图中 TCP连接过程 中的 步骤2;
3. `[.]` 标记 客户端回应服务端的 SYN 请求一个ACK,即前面图中 TCP连接过程 中的 步骤3。

3.2 抓数据包示例

在这里插入图片描述

192.168.10.211.56925 > 192.168.10.198.8000: Flags [P.], cksum 0x7121 (correct), seq 2305192362:2305192531, ack 3370362891, win 8212, length 169
192.168.10.198.8000 > 192.168.10.211.56925: Flags [.], cksum 0xa6d0 (correct), seq 3370362891, ack 2305192531, win 2003, length 0

3.3 抓终结连接:四次挥手

在这里插入图片描述

1. 客户端 调用 close() 主动关闭连接,向服务端发送序列号为 x 的 FIN 包;
2. 服务端 回应 客户端 序列号为 y、确认号为 x+1 的 ACK 。
3. 服务端 调用 close() 向 客户端 发送 序列包为 z、确认号为 x+1 的 FIN 包;
4. 客服端 回应 服务端 序列号为 x+1、确认号为 z+1 的 ACK,然后进入 TIME-WAIT 等待,超时后进入 CLOSED 终态。

数据抓包如下:

192.168.10.198.8000 > 192.168.10.211.57040: Flags [F.], cksum 0x941f (correct), seq 3223361884, ack 4164693292, win 2003, length 0
192.168.10.211.57040 > 192.168.10.198.8000: Flags [.], cksum 0x7bdf (correct), seq 4164693292, ack 3223361885, win 8211, length 0
192.168.10.211.57040 > 192.168.10.198.8000: Flags [F.], cksum 0x7bde (correct), seq 4164693292, ack 3223361885, win 8211, length 0
192.168.10.198.8000 > 192.168.10.211.57040: Flags [.], cksum 0x941e (correct), seq 3223361885, ack 4164693293, win 2003, length 0

其中,[F.] 标记带确认序号的 FIN 包,而 [.] 标记对 FIN 包的回应。

如果想了解 TCP 握手和挥手的内部细节,可参考博文 Linux:TCP三握四挥简析 。

4. 参考资料

https://www.rfc-editor.org/rfc/rfc793
https://blog.csdn.net/vnjohn/article/details/129245099

相关文章:

Linux: tcpdump抓包示例

文章目录 1. 前言2. TCP 状态机3. tcpdump 抓包示例3.1 抓连接握手包:三次握手3.2 抓数据包示例3.3 抓终结连接:四次挥手 4. 参考资料 1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任…...

seafile server10.0.1 onlyoffice

目标:解决seafile server无法查看office相关文档问题 seafile server 已安装完成 安装onlyoffice 一、Install Docker Engine on Ubuntu 20.04 验证是否安装成功 sudo docker run hello-world 二、拉取onlyoffice/documentserver 镜像及安装 docker network cre…...

商城系统选型:Java商城系统还是PHP商城系统好?

电子商务的不断发展,商城系统成为了企业建设在线销售平台的重要组成部分。 可是在选择合适的商城系统时,许多企业面临着一个重要的决策:是选择Java商城系统还是PHP商城系统呢?下面就对这两种常见的商城系统进行比较,并…...

【多线程进阶】线程安全的集合类

文章目录 前言1. 多线程环境使用 ArrayList2. 多线程环境使用队列3. 多线程环境使用哈希表3.1 HashTable3.2 ConcurrentHashMap 总结 前言 本文主要讲解 Java 线程安全的集合类, 在之前学习过的集合类中, 只有 Vector, Stack, HashTable, 是线程安全的, 因为在他们的关键方法中…...

016 Spring Boot + Vue 图书管理系统

Spring Boot Vue 图书馆管理系统(library-system) 本地快捷预览项目 第一步:运行 db 文件夹下的springboot-vue.sql(询问作者获取),创建springboot-vue数据库 第二步:修改后端数据库配置文件,启动后端 …...

C语言中volatile/register/const/static/extern/auto关键字的作用

目录 一、volatile 二、register详解 三、const详解 四、static详解 五、extern详解 语法 作用 六、auto详解 突然想总结一下这些关键字的作用,灵活使用这些对程序的可靠性和速率都有提高 一、volatile volatile是防止编译器优化,如果是高频繁…...

docker compose的安装和使用

docker-copose 介绍 docker-compose 是一个容器编排工具(自动化部署、管理); 它用来在单台 Linux 服务器上运行多个 Docker 容器; docker-compose 使用YAML文件来配置所有需要运行的 Docker 容器,该 YAML 文件的默认名称为 docker-compose.…...

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by

在某项目中遇到下面的错误, ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ./model2trt_v2) ./model2trt_v2: /lib64/libstdc.so.6: version GLIBCXX_3.4.21 not found (required by ../../../lib/linux_lib/libcuda_utils…...

数字化转型的必备工具:智能呼叫中心系统的应用

数字化转型已经成为企业发展的必然趋势,在这个过程中,智能呼叫中心系统成为了一个不可或缺的工具。智能呼叫中心系统通过整合各种通信渠道和自动化技术,为企业提供了高效、智能的客户服务解决方案。 首先,系统能够集成多种通信渠…...

macOS Sonoma 正式版系统已发布,macos14值得更新吗

北京时间9月27日macOS Sonoma 正式版系统发布,为 Mac 带来一系列丰富新功能:优化小组件、升级视频会议、沉浸式游戏体验等,最新macos14值得更新吗?这里根据我一个月的试用beta版本体验来分享一下。 我使用的是M1芯片的MacBook air…...

数据结构-图-最短路径问题

最短路径问题 单源最短路径Dijkstra算法原理代码实现 Bellman-Ford算法原理代码实现SPFA优化SPFA代码实现 多元最短路径Floyd-Warshall算法原理代码实现 单源最短路径 🚀最短路径:从图G的某个顶点出发到达另一个顶点的最短路径,其中最短是指…...

弹性资源组件elastic-resource设计(二)-集群

简介 弹性资源组件提供动态资源能力,是分布式系统关键基础设施,分布式datax,分布式索引,事件引擎都需要集群和资源的弹性资源能力,提高伸缩性和作业处理能力。 本文介绍弹性资源组件的设计,包括架构设计和详细设计,指导开发人员代码开发,设计基于《flink原理源码分析(一…...

Flink学习笔记(一):Flink重要概念和原理

文章目录 1、Flink 介绍2、Flink 概述3、Flink 组件介绍3.1、Deploy 物理部署层3.2、Runtime 核心层3.3、API&Libraries 层3.4、扩展库 4、Flink 四大基石4.1、Checkpoint4.2、State4.3、Time4.4、Window 5、Flink 的应用场景5.1、Event-driven Applications【事件驱动】5.…...

网络中的一些基本概念

数据共享本质是网络数据传输 ,即计算机之间通过网络来传输数据,也称为 网络通信 。 根据网络互连的规模不同,可以划分为局域网和广域网。 局域网 LAN 局域网,即 Local Area Network ,简称 LAN 。 Local 即标识了局…...

mysql中varchar长度为多少

一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无论存…...

python+selenium实现UI自动化(入门篇)

一、基础准备。 python环境安装,参考:CSDN pycharm安装,参考:CSDN 谷歌浏览器驱动配置,参考:CSDN二、新建pycharm项目 截图中,上面是项目地址(可以提前在指定位置创建文件夹&#xf…...

深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict

深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict 1、nn.Sequential 、 nn.ModuleList 、 nn.ModuleDict 类都继承自 Module 类。2、nn.Sequential、nn.ModuleList 和 nn.ModuleDict语法3、Sequential 、ModuleDict、 ModuleList 的区别…...

【DevOps】搭建你的第一个 Docker 应用栈

搭建你的第一个 Docker 应用栈 1.Docker 集群部署2.第一个 Hello World2.1 获取应用栈各节点所需镜像2.2 应用栈容器节点互联2.3 应用栈容器节点启动2.4 应用栈容器节点的配置2.4.1 Redis Master 主数据库容器节点的配置2.4.2 Redis Slave 从数据库容器节点的配置2.4.3 Redis 数…...

软件测试职业生涯需要编写的全套文档模板,收藏这一篇就够了 ~

作为一名测试工程师,在整个的职业生涯中,会涉及到各种不同类型的文档编写,大体包括如下: 对应文档模板及文档编写视频如下: 一、测试岗位必备的文档 在一个常规的软件测试流程中,会涉及到测试计划、测试方…...

【Kubernetes】Pod——k8s中最重要的对象之一

Pod是什么?如何使用Pod?资源共享和通信Pod 中的存储Pod 联网:跨 Pod 通信 静态 Pod感谢 💖 Pod是什么? Pod是k8s中创建和管理的、最小的可部署的计算单元。它包含一个或多个容器。就像豌豆荚里面包含了多个豌豆一样。…...

从.axf到.bin:ARM Compiler 6.14链接与格式转换的隐藏细节(Keil MDK实战)

从.axf到.bin:ARM Compiler 6.14链接与格式转换的隐藏细节(Keil MDK实战) 当你在Keil MDK中点击"Build"按钮时,背后发生的远不止简单的代码翻译。对于使用STM32的嵌入式工程师而言,理解从源代码到最终烧录文…...

51单片机LCD12864显示中文,别再傻傻用字库了!手把手教你自定义取模显示任意汉字

51单片机LCD12864深度定制:从零实现任意汉字点阵显示的艺术 在嵌入式开发领域,LCD12864液晶屏因其性价比高、接口简单而广受欢迎。但当我们需要显示公司Logo、特殊符号或艺术字体时,标准中文字库的局限性就暴露无遗。本文将彻底打破这种限制&…...

NRF52833开发实战:从零构建Keil工程与一键烧录

1. 环境搭建:从零准备NRF52833开发工具链 第一次接触NRF52833开发时,最头疼的就是环境配置。记得我刚开始用Keil调试蓝牙项目时,光是找齐所有安装包就花了整整两天。现在把完整工具链的获取方式和避坑要点整理给你,新手照着做半小…...

Sunshine游戏串流服务器完整指南:三步搭建个人游戏云

Sunshine游戏串流服务器完整指南:三步搭建个人游戏云 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款强大的开源自托管游戏串流服务器,专为M…...

GE模型加载卸载API

模型加载和卸载 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow…...

DevSquad:基于Docker Compose的一站式开发环境解决方案

1. 项目概述:一个为开发者量身定制的“特种作战小队”如果你是一名开发者,无论是独立作战还是身处团队,一定都经历过这样的场景:为了搭建一个项目,你需要反复安装和配置各种开发工具、运行环境、依赖包。从代码编辑器、…...

高精度正弦/余弦插值技术解析与应用

1. 高精度正弦/余弦插值技术概述在工业自动化、电机控制和精密测量领域,位置传感器是核心部件之一。这类传感器通常输出两路相位差90度的正弦和余弦模拟信号,其幅值变化与机械位置或角度呈严格对应关系。如何将这些模拟信号转换为高精度的数字位置信息&a…...

AI知识库构建实战:从RAG原理到工程化实现

1. 项目概述:一个面向AI的知识库构建方案最近在GitHub上看到一个挺有意思的项目,叫mcglothi/ai-knowledge-base。乍一看名字,你可能会觉得这又是一个关于如何用AI构建知识库的教程或者工具集。但当我深入去研究它的代码、文档和设计思路后&am…...

开源金属四足机器人MEVIUS2设计与实现解析

1. MEVIUS2:开源金属四足机器人设计解析四足机器人技术近年来取得了显著进展,从实验室走向了实际应用场景。作为一名长期从事机器人系统开发的工程师,我特别关注如何降低这类先进机器人的研发门槛。MEVIUS2项目正是这一领域的突破性尝试——它…...

基于Gradio与多模型代理的AI模拟面试系统实战部署指南

1. 项目概述与核心价值最近在准备技术面试,刷题刷到头晕,对着白板自言自语总觉得差点意思。市面上那些模拟面试工具,要么是纯文本问答,冷冰冰的;要么流程僵化,和真实面试里那种有来有回的对话感相去甚远。直…...