一、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. 引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.

    app.UseIpRateLimiting(); #需要放在前面,否则抓去不准,还有可能会出现下列错误 本次出现这个错误,是因为  .Net Core 跨域 里面的这行:httpContext.Res ...

  2. AudioLDM 2,加速!

    AudioLDM 2 由刘濠赫等人在 AudioLDM 2: Learning Holistic Audio Generation with Self-supervised Pretraining 一 ...

  3. 【Flask】Flask快速使用 web框架原理 Flask配置文件写法 路由系统源码分析

    目录 1 Flask介绍 1.1同步框架和异步框架的区别 1.2 flask介绍 2 Flask快速使用 3 web框架原理(了解) 4 flask 展示用户信息案例 4.1 login.html 4 ...

  4. Wiindows下更改CMake编译器为MinGW

    个人环境 MinGW:使用 QT6 install 的 mingw1120_64. CMake:使用 QT6 install 的 CMake 3.24.2. 第一次编译时,默认生成VS的工程文件,为了 ...

  5. Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) (个人题解)

    Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) A. Prison Break https:// ...

  6. spring中的核心类有那些,各有什么作用?

    BeanFactory:产生一个新的实例,可以实现单例模式BeanWrapper:提供统一的get及set方法ApplicationContext:提供框架的实现,包括BeanFactory的所有功能 ...

  7. windows无法远程访问liunx的mysql解决方案(8.0.27版本)

    一.安装后mysql后发现windows上的无法正常访问,报错如下: 不管是navicat软件,还是使用python的pymsql进行连接 1.navicat软件如下:"Access den ...

  8. 【SHELL】变量内容替换

    使用场景:变量存放的路径通常在使用时需要进行斜杠转义 WORKSPACE=`pwd` WORKSPACE=$(echo ${WORKSPACE//\//\\/})

  9. 2023 SHCTF-校外赛道 MISC WP

    WEEK1 请对我使用社工吧 提示:k1sme4的朋友考到了一所在k1sme4家附近的大学,一天,k1sme4的朋友去了学校对面的商场玩,并给k1sme4拍了一张照片,你能找到他的学校吗? flag格 ...

  10. ubuntu-软件管理工具-apt