6张图表 + 1个案例 带你入门tcpdump的使用和原理
一、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的使用和原理的更多相关文章
- 一个简单的案例带你入门Dubbo分布式框架
相信有很多小伙伴都知道,dubbo是一个分布式.高性能.透明化的RPC服务框架,提供服务自动注册.自动发现等高效服务治理方案,dubbo的中文文档也是非常全的,中文文档可以参考这里dubbo.io.由 ...
- 可能是史上最强大的js图表库——ECharts带你入门
PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...
- highchart访问一次后台服务返回多张图表数据
本文承接上一篇,我们制作动态图表的时候,往往需要的不止一张图表,如果每张图表都与服务接口做一次交互的话未免太过频繁,这无论对前后还是后台都是一种压力,本文介绍一种一次访问返回多组数据的方式来减少前台与 ...
- 史上最强大的js图表库——ECharts带你入门(转)
出处:http://www.cnblogs.com/zrtqsk/p/4019412.html PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 Sta ...
- 小案例带你揭秘JS事件
小案例带你揭秘JS事件 ### 什么是事件? 在js中一个事件的组成由那些呢? 谁触发事件:事件源 触发什么事件: 事件的类型 触发事件干什么事:事件处理函数 事件传播的过程 捕获阶段 就是从wind ...
- 一天带你入门到放弃vue.js(一)
写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...
- C#单元测试,带你入门
注:本文示例环境 VS2017 XUnit 2.2.0 单元测试框架 xunit.runner.visualstudio 2.2.0 测试运行工具 Moq 4.7.10 模拟框架 为什么要编写单元测试 ...
- SQLite 带你入门
SQLite数据库相较于我们常用的Mysql,Oracle而言,实在是轻量得不行(最低只占几百K的内存).平时开发或生产环境中使用各种类型的数据库,可能都需要先安装数据库服务(server),然后才能 ...
- 一天带你入门到放弃vue.js(三)
自定义指令 在上面学习了自定义组件接下来看一下自定义指令 自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是v ...
- 一天带你入门到放弃vue.js(二)
接下来我们继续学习一天带你入门到放弃系列vue.js(二),如有问题请留言讨论! v-if index.html <div id="app"> <p v-if=& ...
随机推荐
- Axure 母版红色怎么去除?
视图 => 遮罩 => 母版 勾选去掉
- PPT 动画-多层旋转(圆角三角形)
多层旋转动画 插入若干个三解形 然后将页面切换成[平滑](Office 2019~ 365 才有这功能,或者 iSlide 平滑过渡)
- 【python爬虫】requests高级用法 代理池搭建 爬虫实战
目录 昨日回顾 面试题 爬虫总结 今日内容 1 requests高级用法 1.0 解析json 1.1 ssl认证(了解) 1.2 使用代理(重要) 1.3 超时设置 1.4 异常处理 1.5 上传文 ...
- Tomcat8 安装及配置步骤
Tomcat8安装及配置步骤 1.下载tomcat8 https://tomcat.apache.org/download-80.cgi#8.5.85 根据自己电脑的系统 ,下载对应的版本zip ,我 ...
- [NOI2015]荷马史诗 - Huffman树
题目描述 追逐影子的人,自己就是影子. --荷马 llison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是由<奥德赛&g ...
- springboot线程池的使用方式2
一.简单介绍 方式1:Executors.newCachedThreadPool线程池.Executors有7种不同的线程池. private static final ExecutorService ...
- 【调试】ftrace(二)新增跟踪点
内核的各个子系统已经有大量的跟踪点,如果这些跟踪点无法满足工作中的需求,可以自己手动添加跟踪点. 添加跟踪点有两种方式,一种是仿照events/目录下的跟踪点,使用TRACE_EVENT() 宏添加. ...
- MINGW64 禁用 Bash 路径参数转换
MINGW64 可以让 Windows 无缝使用 Linux 命令,但是路径参数会被转换为 Windows 风格.例如: $ ./adb shell ls /system ls: C:/Program ...
- java项目实战-tomcat-SpringMVC-基本用法01-day25
目录 1. maven创建 war项目 2. SpringMVC 1. maven创建 war项目 什么是jar项目 什么是war项目? jar项目: 由main方法来开始的 直接依赖JVM就能编译运 ...
- GoLang 指针初探
1. 内置类型和引用类型 Go 中内置类型包括数值类型,字符串类型和布尔类型.引用类型包括切片,映射,通道,接口和函数类型.其中,引用类型表示创建的变量包含一个指向底层数据结构的指针和一组管理底层数据 ...