一、引言
1、tcpdump 简介
tcpdump 是一个网络流量分析工具,用于捕获和分析通过计算机网络传输的网络数据包。它能够监控网络上各类协议的数据包,并提供详细的流量信息,可以帮助用户诊断网络问题、调试应用程序、以及进行网络安全分析。
tcpdump 是 Linux 系统下广泛使用的网络流量分析工具,基于 libpcap 库实现数据包捕获。详细阐述了 tcpdump 的背景起源、工作原理及在不同 Linux 发行版上的安装方法。重点讲解了基本语法、常用选项如接口指定、过滤表达式设置,并通过具体示例演示了如何捕获 TCP、UDP、ICMP 流量及保存 pcap 文件。内容涵盖从基础使用到高级会话分析,适用于网络故障排查、应用调试及安全审计场景。

tcpdump 是一个网络流量分析工具,用于捕获和分析通过计算机网络传输的网络数据包。它能够监控网络上各类协议的数据包,并提供详细的流量信息,可以帮助用户诊断网络问题、调试应用程序、以及进行网络安全分析。
tcpdump 的起源可以追溯到互联网协议栈(TCP/IP)的发展和网络协议分析的需求。上世纪 80 年代末,随着以太网和互联网协议的普及,网络设备的复杂度和网络通信的数量不断增加。网络故障、性能问题以及安全事件的诊断变得愈发困难。
Van Jacobson 和 Craig Leres 的团队在这一背景下开发了 tcpdump。它的设计基于对数据包捕获和分析的强大需求,通过简洁、有效的方式帮助工程师和研究人员对网络通信进行可视化分析和故障排查。tcpdump 最初是为 UNIX 操作系统设计的,利用了 BSD 套接字接口(socket API)来捕获网络数据包。
tcpdump 在最初的几十年里持续发展,并不断扩展其功能。
1987 年:初始版本发布
1990 年代:逐渐流行
1997 年:libpcap 库的独立
2000 年代:开放源代码和社区参与
2010 年代:成为网络分析标准工具
现代:兼容性与多平台支持
tcpdump 的核心功能是捕获通过网络接口传输的数据包。它使用了底层的网络捕获库 libpcap 来实现这一功能。libpcap 提供了一个跨平台的接口,允许 tcpdump 访问操作系统的网络栈并捕获数据包。
tcpdump 的工作流程可以分为以下几个步骤:
初始化和配置
打开网络接口
设置过滤器
捕获数据包
解析和显示数据包
输出和记录
在 Linux 系统中安装 tcpdump 非常简单。不同的 Linux 发行版可能有不同的包管理工具。下面是一些常见 Linux 发行版上安装 tcpdump 的方法:
在 Debian 和基于 Debian 的系统(如 Ubuntu)上,可以使用 APT 包管理器来安装 tcpdump:
sudo apt update
sudo apt install tcpdump
在 CentOS 和基于 RHEL 的系统上,可以使用 YUM 包管理器来安装 tcpdump:
sudo yum install tcpdump
在 Fedora 上,可以使用 DNF 包管理器来安装 tcpdump:
sudo dnf install tcpdump
在 openSUSE 上,可以使用 ZYpp 包管理器来安装 tcpdump:
sudo zypper install tcpdump
安装完成后,可以通过以下命令验证 tcpdump 是否安装成功:
tcpdump --version
如果安装成功,该命令将输出 tcpdump 的版本信息。
tcpdump [options] [expression]
1. -i
指定监听的网络接口。
tcpdump -i eth0
默认情况下,tcpdump 会监听所有的网络接口。如果你想指定某个接口(如 eth0),可以使用该选项。
2. -n
避免将主机名解析成 IP 地址,显示 IP 地址而不是主机名。
tcpdump -n
默认情况下,tcpdump 会解析地址(如将 192.168.1.1 解析为主机名)。使用 -n 选项可以禁用 DNS 解析,直接显示 IP 地址,抓包速度更快。
3. -v, -vv, -vvv
设置详细级别。-v 显示较多的包信息,-vv 显示更详细的,-vvv 显示最详细的信息。
tcpdump -v
可以使用多个 -v 来增加详细程度。
4. -X
显示数据包的十六进制和 ASCII 格式的内容。
tcpdump -X
此选项会打印出每个数据包的十六进制和 ASCII 表示,方便查看实际的通信数据。
5. -c
指定捕获数据包的数量。捕获指定数量的数据包后,tcpdump 会停止。
tcpdump -c 10
捕获 10 个数据包后停止。
6. -w
将捕获的数据包保存到文件中。
tcpdump -w capture.pcap
使用该选项可以将捕获的包保存到指定的文件中,之后可以通过 Wireshark 或其他工具打开 .pcap 文件进行详细分析。
7. -r
读取一个 tcpdump 捕获的 .pcap 文件并显示其内容。
tcpdump -r capture.pcap
此选项允许你读取之前保存的抓包文件并查看其内容。
8. -s
设置捕获数据包的快照长度(默认值为 262144 字节)。这决定了每个包的最大捕获大小。
tcpdump -s 0
使用 -s 0 可以捕获整个数据包(包括数据包中的所有内容),而不是只捕获数据包的头部。
9. -l
将输出结果以行缓冲的方式显示,适用于实时分析。
tcpdump -l
实时显示捕获的数据包,不会被系统缓存。
10. -A
打印数据包的 ASCII 内容,适用于查看 HTTP、DNS 等文本协议的数据。
tcpdump -A
这个选项会显示数据包的 ASCII 内容,便于分析协议的文本内容。
11. -q
减少输出的详细信息,仅显示数据包的基本信息。
tcpdump -q
适用于快速查看数据包的基本概况。
过滤表达式允许你定义哪些数据包会被捕获。tcpdump 支持多种过滤条件,包括按协议、IP 地址、端口等。
1. 按协议过滤
tcpdump tcp
tcpdump udp
tcpdump icmp
2. 按 IP 地址过滤
tcpdump host 192.168.1.1
tcpdump src 192.168.1.1
tcpdump dst 192.168.1.1
3. 按端口过滤
tcpdump port 80
tcpdump src port 443
tcpdump dst port 53
4. 逻辑运算符
你可以使用逻辑运算符(如 and, or, not)来组合多个过滤条件。
tcpdump tcp and src 192.168.1.1 and dst port 80
tcpdump tcp or udp
tcpdump not src 192.168.1.1
捕获所有经过 eth0 接口的 TCP 数据包:
tcpdump -i eth0 tcp
捕获来自 192.168.1.1 且目标端口为 80 的数据包:
tcpdump src 192.168.1.1 and dst port 80
将数据包保存到文件中:
tcpdump -i eth0 -w output.pcap
捕获 ICMP 数据包并实时显示:
tcpdump icmp -l
捕获 HTTP(端口 80)流量并显示 ASCII 内容:
tcpdump port 80 -A
1. 捕获特定网络流量并显示部分数据包
tcpdump -i eth0 'src host 192.168.1.1 and dst port 80' -X
2. 捕获并分析一个特定的 TCP 会话
捕获与 TCP 会话相关的所有包,并保存到文件中:
tcpdump -i eth0 tcp port 80 and 'src host 192.168.1.1' -w session.pcap

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online