一、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. Jenkins Pipeline 流水线 - Parameters 参数化构建

    可以通过参数的方式,指定构建的版本 有两种方式 界面添加 Pipeline Script 脚本配置 (需要Build 一次,然后生效,不知道有没有其它办法) General 界面添加 Pipeline ...

  2. 配置阿里云docker镜像加速

    配置好后 重新加载一下 daemon [root@centos-linux jimmy]# systemctl daemon-reload [root@centos-linux jimmy]# sys ...

  3. 🤗Hugging Face 87个 AI 游戏可以在线玩啦

    7月9日结束的开源游戏挑战赛有超过来自全球 1000 多名开发者参加 一共收录了 87 个游戏 目前已经进入投票期 视频中的:猜名画 ️ 用了之前推荐的 LEDITS 目前得分很高呢 来试试看你能猜对 ...

  4. 白话 Pulsar Bookkeeper 的存储模型

    最近我们的 Pulsar 存储有很长一段时间数据一直得不到回收,但消息确实已经是 ACK 了,理论上应该是会被回收的,随着时间流逝不但没回收还一直再涨,最后在没找到原因的情况下就只有一直不停的扩容. ...

  5. Vue3--使用脚手架创建一个vue应用,实现todolist

    一.安装脚手架,运行项目 1.1 安装,运行 首先安装 16.0 或更高版本的 Node.js 然后在cmd安装并执行 create-vue 它是 Vue 官方的项目脚手架工具 npm init vu ...

  6. L3-020 至多删三个字符 (30分) (DP)

    问题描述: 给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1e6] ...

  7. 图扑 HT for Web 手机端运维管理系统

    随着信息技术的快速发展,网络技术的应用涉及到人们生活的方方面面.其中,手机运维管理系统可提供数字化.智能化的方式,帮助企业和组织管理监控企业的 IT 环境,提高运维效率.降低维护成本.增强安全性.提升 ...

  8. vue结合element-ui实现多层复选框checkbox

    1.需求如上图所以: html相关代码如下: 1 <div class="intent-course-wrapper"> 2 <div class="c ...

  9. distributor和gateway联合实现出中继的负载均衡+故障转移

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在之前的文章,我们介绍过distributor模块实现多线路分发的配置方法,但是当线路发生故障时,distributor并不会自动跳 ...

  10. 【MicroPython】用 c 添加接口 -- 框架介绍

    [来源]https://www.eemaker.com/micropython-c-kuangjia.html