一、tcpdump简介

tcpdump是什么?

来看看 tcpdump官网怎么说:This is the home web site of tcpdump, a powerful command-line packet analyzer; and libpcap, a portable C/C++ library for network traffic capture.

不妨来看看chatGPT插件怎么说?

tcpdump是一种网络抓包工具,它能够捕获网络数据包并将其分析和显示出来。它支持多种协议,包括TCP、UDP、ICMP等,并能够根据不同的过滤条件进行数据包的筛选和分析。tcpdump是一个非常强大的工具,可以用于网络故障排除、网络安全分析等方面。

二、tcpdump使用入门

2.1 tcpdump命令使用

tcpdump的使用方法比较简单,也就是:

tcpdump [选项] [过滤表达式]

选项和表达式的外面都加了中括号,表明它们都是可选的。

tcpdump 提供了大量的选项以及各式各样的过滤表达式。不过只需要掌握一些常用选项和过滤表达式,就可以满足日常使用需要了。下面是一些最常见的用法:

2.2 tcpdump输出结果分析

tcpdump 的基本输出格式为:

时间戳 协议 源地址.源端口 > 目的地址.目的端口 网络包详细信息

“时间戳 协议 源地址.源端口 > 目的地址.目的端口”就是字面意思,一眼看懂。

网络包详细信息包括:

  • Falgs:TCP的标志位信息
  • seq:序列号,范围是0 - 2^32-1
  • win:窗口大小
  • options:选项

不知道你发现没有,这些信息和TCP报文头部的结构是一一对应呢?

输出结果中的Flags信息使用的是简写,补充一张Flags具体说明:

三、tcpdump抓包实战

本案例是使用tcpdump抓包TCP三次握手和四次挥手的过程。这个案例不需要苛刻复杂的实验环境,不需要云服务器,不需要虚拟机,只要有一台电脑,不管是Windows还是MacOS,只要配置了简单的开发环境,就可以进行实战了。

3.1 抓包过程

1.在本地启动一个Spring Boot工程,提供一个测试连接:http://localhost:8080/hello

2、打开一个控制台窗口(窗口1),开启tcpdump抓包,命令如下:

sudo tcpdump tcp -i lo0 port 8080 -S -nn -t

具体含义:过滤TCP协议,抓取回环包,过滤端口8080,绝对数值,不解析IP地址和端口号名称,不显示时间

3、再打开一个控制台窗口(窗口2),访问测试连接,命令如下:

curl 127.0.0.1:8080/hello

4、在窗口1中可以看到抓包的内容显示:

3.2 抓包分析

从上述抓包结果,可以清晰看到TCP建立连接、数据传输、断开连接的过程。

可以对照着回顾下“三次握手”、“四次挥手”的过程,相信一定会加深印象的。

四、tcpdump原理浅析

图片源自:tcpdump官网的文章libpcap: An Architecture and Optimization Methodology for Packet Capture

tcpdump 抓包其实是使用操作系统底层提供的 libpacp 机制和相关系统调用实现的。Pcap是计算机网络管理领域中一个用于捕获网络流量的应用程序接口(API)。tcpdump 的工作过程是:在收发包时,使用 libpcap 库来访问网络接口和解析数据包;将符合规则(通过BPF filter设置)的数据包拷贝一份到 tcpdump 的内核缓冲区,然后以 PACKET_MMAP 的方式将这部分内存映射到 tcpdump 用户空间,在用户空间进行解析和分析,就可以输出到终端或者保存到文件中了。

通过上图可以看到,在收包的时候,如果网络包已经被网卡丢弃了,那么 tcpdump 是抓不到它的;在发包的时候,如果网络包在协议栈里被丢弃了,比如因为发送缓冲区满而被丢弃,tcpdump 同样抓不到它。那么, tcpdump 的能力范围简单地总结为:网卡以内的问题可以交给 tcpdump 来处理;对于网卡以外(包括网卡上)的问题,tcpdump 就无能为力了。这个时候,需要在对端也使用 tcpdump 来抓包。

tcpdump是一款简单好用的命令行抓包工具,希望本文的分享对各位有用!

6张图表 + 1个案例 带你入门tcpdump的使用和原理的更多相关文章

  1. 一个简单的案例带你入门Dubbo分布式框架

    相信有很多小伙伴都知道,dubbo是一个分布式.高性能.透明化的RPC服务框架,提供服务自动注册.自动发现等高效服务治理方案,dubbo的中文文档也是非常全的,中文文档可以参考这里dubbo.io.由 ...

  2. 可能是史上最强大的js图表库——ECharts带你入门

    PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...

  3. highchart访问一次后台服务返回多张图表数据

    本文承接上一篇,我们制作动态图表的时候,往往需要的不止一张图表,如果每张图表都与服务接口做一次交互的话未免太过频繁,这无论对前后还是后台都是一种压力,本文介绍一种一次访问返回多组数据的方式来减少前台与 ...

  4. 史上最强大的js图表库——ECharts带你入门(转)

    出处:http://www.cnblogs.com/zrtqsk/p/4019412.html PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 Sta ...

  5. 小案例带你揭秘JS事件

    小案例带你揭秘JS事件 ### 什么是事件? 在js中一个事件的组成由那些呢? 谁触发事件:事件源 触发什么事件: 事件的类型 触发事件干什么事:事件处理函数 事件传播的过程 捕获阶段 就是从wind ...

  6. 一天带你入门到放弃vue.js(一)

    写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...

  7. C#单元测试,带你入门

    注:本文示例环境 VS2017 XUnit 2.2.0 单元测试框架 xunit.runner.visualstudio 2.2.0 测试运行工具 Moq 4.7.10 模拟框架 为什么要编写单元测试 ...

  8. SQLite 带你入门

    SQLite数据库相较于我们常用的Mysql,Oracle而言,实在是轻量得不行(最低只占几百K的内存).平时开发或生产环境中使用各种类型的数据库,可能都需要先安装数据库服务(server),然后才能 ...

  9. 一天带你入门到放弃vue.js(三)

    自定义指令 在上面学习了自定义组件接下来看一下自定义指令 自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是v ...

  10. 一天带你入门到放弃vue.js(二)

    接下来我们继续学习一天带你入门到放弃系列vue.js(二),如有问题请留言讨论! v-if index.html <div id="app"> <p v-if=& ...

随机推荐

  1. SQL Server 2016 安装

    数据库安装 选择全新安装模式继续安装 输入产品秘钥:这里使用演示秘钥进行 接受许可 规则检测 可以后期再开放防火墙对外端口 选择需要安装的功能,想省事可以选择[全选] 可以安装JDK,这边选择取消 P ...

  2. Nacos 1.2.1 集群搭建(三) Nginx 配置 集群

    配置 Nginx 可以把.conf 文件拉到本地,配置好再传上去 #gzip on; upstream cluster{ server 192.168.0.113:8848; server 192.1 ...

  3. ME21N 采购订单批导

    1业务场景 事务代码:ME21N创建采购订单 可以通过BAPI_PO_CREATE1批量创建 2代码实现 1.抬头 2.行项目 3.增强 抬头增强字段放在BAPI_TE_MEPOHEADER结构中的C ...

  4. HDU - 2897 邂逅明下 (简单博弈)

    题目链接: https://vjudge.net/problem/HDU-2897 题目大意: 就是现在一堆石子有n颗, 每次只能拿走p~q颗, 当剩余少于p颗的时候必须一次拿完 拿走最后一颗的人败 ...

  5. Serverless 时代开启,云计算进入业务创新主战场

    作者 | 于洪涛 "我们希望让用户做得更少而收获更多,通过 Serverless 化,让企业使用云服务像用电一样简单." Serverless 化正在成为全新的软件研发范式,阿里云 ...

  6. RocketMQ(2)---核心概念、特性、使用等

    对于RocketMQ而言,感觉官方提供的东西还是可以的:https://github.com/apache/rocketmq/tree/master/docs/cn

  7. C#设计模式04——工厂方法的写法

    1. What是C#工厂方法?C#工厂方法是一种设计模式,它通过创建具有相同基类的对象来实现代码的重用和灵活性. 2. Why使用C#工厂方法?使用C#工厂方法有以下好处:- 降低了代码的耦合性,让代 ...

  8. Liunx常用操作(八)-sed命令详细说明

    一.sed简介 sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响. 处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"( oa ...

  9. docker 服务,镜像,容器命令总结

    本文为博主原创,未经允许不得转载: 目录: 1. docker 服务相关命令 2. 镜像相关总结 3. 容器相关命令总结 1. docker 服务相关: 1. 查看docker版本及相关信息: doc ...

  10. 【C++】类概念及使用

    类定义中不允许对数据成员初始化 类外只能访问公有部分 类成员必须指定访问属性 类的成员函数是实现对封装的数据成员进行操作的唯一途径 类定义中不允许定义本类对象,因无法预知大小 类与结构形式相同,唯一区 ...