1.工具简介
Tcpdump 是一款命令行数据包嗅探工具,能够直接从文件或网络接口捕获并解析数据帧。它适用于任何类 Unix 操作系统。
Tcpdump是一款功能强大的命令行数据包嗅探工具,支持从网络接口实时捕获或从文件解析数据包。作为Unix/Linux系统的标准网络诊断工具,它无需图形界面即可通过终端或SSH等远程连接进行操作,尤其适合服务器环境使用。该工具基于pcap和libpcap库实现底层数据捕获,通过将网卡设置为混杂模式,能够监听整个局域网内所有设备的通信流量,而不仅限于当前主机的目标数据。
在系统兼容性方面,Tcpdump原生支持包括AIX、BSD、Solaris在内的各类Unix系统及其衍生版本,且多数Linux发行版已预装该工具。需要注意的是,由于其直接操作网络硬件的特性,运行Tcpdump需要root权限,通常需要通过sudo命令执行(如:sudo tcpdump -i eth0)。对于Windows平台用户,虽然历史版本Windump已停止维护,但可以通过Windows Subsystem for Linux(WSL)安装Parrot、Ubuntu等发行版,在获得完整Linux工具链支持的同时使用原生Tcpdump。
2.使用说明
2.1检查 Tcpdump 是否安装
要确认系统是否已安装 Tcpdump,可以使用以下命令:
which tcpdump
通常情况下,Tcpdump 的安装路径为 /usr/sbin/tcpdump
。如果未找到该工具,可以通过以下命令安装:
sudo apt install tcpdump
安装完成后,可以通过以下命令验证安装版本:
sudo tcpdump --version
示例输出:
tcpdump version 4.9.3
libpcap version 1.9.1 (with TPACKET_V3)
OpenSSL 1.1.1f 31 Mar 2020
2.2Tcpdump 基本功能
Tcpdump 提供了丰富的功能和过滤器选项,以下是一些常用的命令示例,帮助您快速上手。
2.2.1常用选项
以下是一些常用的 Tcpdump 选项,可以通过组合这些选项实现自定义捕获行为:
选项 | 命令示例 | 功能描述 |
---|---|---|
-D | sudo tcpdump -D | 列出所有可用网络接口 |
-i | sudo tcpdump -i eth0 | 指定捕获的网络接口(如 eth0) |
-n | sudo tcpdump -n | 禁用主机名解析,直接显示 IP 地址 |
-nn | sudo tcpdump -nn | 禁用主机名和端口号解析 |
-e | sudo tcpdump -e | 捕获并显示以太网头部信息 |
-X | sudo tcpdump -X | 以十六进制和 ASCII 格式显示数据包内容 |
-XX | sudo tcpdump -XX | 显示以太网头部及数据包内容 |
-v | sudo tcpdump -v | 增加输出详细程度(-vv 和 -vvv 可进一步提高详细级别) |
-c | sudo tcpdump -c 10 | 捕获指定数量的数据包后退出(如 10 个) |
-s | sudo tcpdump -s 64 | 定义捕获数据包的长度(如 64 字节) |
-S | sudo tcpdump -S | 显示绝对序列号而非相对序列号 |
-q | sudo tcpdump -q | 减少协议信息输出 |
-r | sudo tcpdump -r file.pcap | 从文件中读取捕获的数据包 |
-w | sudo tcpdump -w file.pcap | 将捕获的数据包写入文件 |
2.2.2查看完整选项
要查看 Tcpdump 的完整选项列表,可以使用 man
命令:
man tcpdump
2.3常用命令示例
2.3.1列出可用接口
sudo tcpdump -D
示例输出:
1. eth0 [Up, Running, Connected]
2. any (Pseudo-device that captures on all interfaces) [Up, Running]
3. lo [Up, Running, Loopback]
2.3.2捕获指定接口的流量
sudo tcpdump -i eth0
此命令将在 eth0
接口上捕获流量,并显示每个数据包的基本信息。
2.3.3禁用名称解析
sudo tcpdump -i eth0 -nn
此命令将直接显示 IP 地址和端口号,而不进行名称解析。
2.3.4显示以太网头部
sudo tcpdump -i eth0 -e
此命令将捕获并显示以太网头部信息。
2.3.5显示数据包内容
sudo tcpdump -i eth0 -X
此命令将以十六进制和 ASCII 格式显示数据包内容。
2.3.6组合多个选项
sudo tcpdump -i eth0 -nnvXX
此命令组合了多个选项,显示更详细的输出,包括以太网头部、IP 头部、协议标识和序列号等信息。
2.4文件输入/输出
2.4.1保存捕获数据到文件
sudo tcpdump -i eth0 -w ~/output.pcap
此命令将捕获的流量保存到 output.pcap
文件中。注意,捕获大量数据时可能会占用较多磁盘空间。
2.4.2从文件中读取捕获数据
sudo tcpdump -r ~/output.pcap
此命令将读取 output.pcap
文件中的捕获数据。可以通过添加选项(如 -nn
或 -X
)来调整输出格式
2.5输出解析
当查看 TCPDump 的输出时,可能会有些令人眼花缭乱。运行这些基本开关已经向我们展示了几个不同的视图。我们将花一分钟来分析这个输出并解释我们所看到的。下面的图像和表格将定义每个字段。请注意,我们的过滤器越详细,每个报头显示的详细信息就越多。
Tcpdump 的输出包含多个字段,以下是对常见字段的解析:
字段 | 描述 |
---|---|
时间戳 (Timestamp) | 时间戳字段位于最前面,可以配置为以我们易于处理的时间和日期格式显示。 |
协议 (Protocol) | 这一部分会告诉我们上层协议的类型。在我们的示例中,它显示为 IP。 |
源与目标 IP.端口 (Source & Destination IP.Port) | 这将显示数据包的源和目标地址,以及用于连接的端口号。格式为 IP.端口,例如 192.168.174.1.62420。 |
标志 (Flags) | 这一部分显示使用的任何标志。 |
序列号与确认号 (Sequence and Acknowledgement Numbers) | 这一部分显示用于跟踪 TCP 段的序列号和确认号。在我们的示例中,使用的是较低的数字。 |
协议选项 (Protocol Options) | 在这里,我们将看到客户端和服务器之间商定的 TCP 值,如窗口大小、选择确认、窗口缩放因子等。 |
备注 / 下一个头部 (Notes / Next Header) | 这里将显示解码器发现的其他信息。由于我们正在查看的流量是封装的,因此可能会看到不同协议的额外头部信息。 |
2.6高级应用
Tcpdump 不仅可以用于网络流量分析,还可以通过脚本实现更高级的功能。例如:
-
创建基于 Tcpdump 的 IDS/IPS 系统,监控特定流量模式。
-
结合脚本,根据流量特征自动执行操作(如封禁可疑 IP)。
3.示例
3.1捕获挖矿病毒流量
从源 IP 地址来看,数据包是发送到 94...88:3434(目标矿池)上的,矿池与矿工之间的通信是通过该端口进行的。(结合情报威胁平台)。
"method": "job":
表示这是一个矿池分配的挖矿任务("job"),而不是控制命令或心跳。
"params":
这是矿池分配给矿工的参数,包括:
-
"blob": "109d8cccbd06fabe..."
:这是用于工作量证明的任务数据(例如哈希工作)。 -
"job_id": "722231003100"
:这是矿池为该工作分配的任务 ID。 -
"target": "3401000000"
:表示目标难度。 -
"algo": "rx/0"
:表示使用的算法是rx/0
(一个常见的加密货币挖矿算法)。 -
"seed_hash": "cfacfe0eb8c2dc45a35d75560b998c6c04f209b75c9ea5a9b8a8a24628d1409e"
:任务的种子哈希,用于验证挖矿任务。
"seed_hash" 和其他数据:
这些信息用于矿工与矿池之间的通信,标明任务的细节和状态。
数据传输内容:
内容包括 blob
、job_id
、target
、algo
、seed_hash
等,这些都表明这是一个标准的挖矿任务消息。