最近更新时间:2026-08-26 11:52:25
本文介绍 Linux 系统下 tcpdump 网络抓包工具的安装、命令格式、常用参数及典型抓包操作。通过阅读本文,您能够完成 tcpdump 的安装与基本配置,掌握按接口、协议、目标地址等条件捕获数据包并将抓包结果保存为文件,适用于网络排障和流量分析场景。
tcpdump 是 Linux 系统下强大的命令行网络抓包工具,用于捕获、分析和记录网络数据包。本文介绍如何使用 tcpdump 工具进行捕获和分析数据包。
执行如下命令进行安装。
在 Ubuntu/Debian 系统:
sudo apt-get install tcpdump在 CentOS/RHEL/Fedora 系统:
sudo yum -y install tcpdump验证安装是否成功。
tcpdump --version执行以下命令,捕获指定接口 eth0 的 22 端口数据包。
在抓取时还可以使用 -vvv 参数,使控制台输出详细的交互信息。
tcpdump -s 0 -i eth0 port 22 #-s 数据包抓取长度,指定为0会自适应抓取输出示例如下:
18:40:38.508411 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 6190212:6190368, ack 2845, win 344, length 156
18:40:38.508429 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 6190368:6190620, ack 2845, win 344, length 252
18:40:38.508444 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 6190620:6190776, ack 2845, win 344, length 156
18:40:38.508459 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 6190776:6190932, ack 2845, win 344, length 156
18:40:38.508474 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 6190932:6191088, ack 2845, win 344, length 156
18:40:38.508489 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 6191088:6191244, ack 2845, win 344, length 156
18:40:38.508504 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 6191244:6191400, ack 2845, win 344, length 156执行以下命令捕获指定接口 eth0 的 TCP 协议数据包。
tcpdump -s 0 -i eth0 tcp输出示例:
14:20:13.184251 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 5947548:5947704, ack 2917, win 344, length 156
14:20:13.184268 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 5947704:5947956, ack 2917, win 344, length 252
14:20:13.184284 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 5947956:5948112, ack 2917, win 344, length 156
14:20:13.184299 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 5948112:5948268, ack 2917, win 344, length 156
14:20:13.184314 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 5948268:5948424, ack 2917, win 344, length 156
14:20:13.184329 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 5948424:5948580, ack 2917, win 344, length 156
14:20:13.184344 IP vm10-0-0-31.ssh > 10.0.0.125.45968: Flags [P.], seq 5948580:5948736, ack 2917, win 344, length 156执行以下命令,捕获目标 IP 10.0.0.120 的 ICMP 协议数据包。其中 and 表示“与”,此外还可以使用运算符 or 表示“或”、not 表示“非”。
tcpdump -s 0 -i eth0 -vvv dst 10.0.0.120 and icmp输出示例:
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
19:07:01.905937 IP (tos 0x0, ttl 64, id 38277, offset 0, flags [none], proto ICMP (1), length 84)
vm10-0-0-31 > 10.0.0.120: ICMP echo reply, id 8629, seq 4, length 64
19:07:02.905950 IP (tos 0x0, ttl 64, id 39081, offset 0, flags [none], proto ICMP (1), length 84)
vm10-0-0-31 > 10.0.0.120: ICMP echo reply, id 8629, seq 5, length 64
19:07:03.905965 IP (tos 0x0, ttl 64, id 39236, offset 0, flags [none], proto ICMP (1), length 84)
vm10-0-0-31 > 10.0.0.120: ICMP echo reply, id 8629, seq 6, length 64
19:07:04.905974 IP (tos 0x0, ttl 64, id 39846, offset 0, flags [none], proto ICMP (1), length 84)执行以下命令将捕获结果保存到 test.cap 文件。
tcpdump -s 0 -i eth0 -w test.cap使用 Ctrl+C 手动停止抓取。保存后的文件可以使用 Wireshark 等工具进行进一步分析,也可以通过 tcpdump 查看。
tcpdump -r test.cap详细使用教程可参考其官方文档。
tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ -immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]参数 | 说明 | 用法 |
|---|---|---|
| 指定网络接口 | `tcpdump -i eth0 |
| 列出所有接口 |
|
| 数据包抓取长度 |
|
| 指定捕获包数量 |
|
| 不解析主机和端口名 |
|
| 输出详细信息 |
|
| 将抓包结果写入文件(pcap 格式) |
|
| 从 pcap 文件读取 |
|
expression 表达式用于指定过滤条件,包含以下类型:
指定类型:host(主机)、net(网络)和 port(端口)。
指定传输方向:src(源)、dst(目标)、dst or src(源或目标)和 dst and src(源和目标)。
指定协议:ICMP、IP、ARP、RARP、TCP 和 UDP 等协议类型。
tcpdump host 192.168.1.100
tcpdump src host 192.168.1.100
tcpdump dst host 192.168.1.100
tcpdump ICMP | TCP | UDP | ARP
纯净模式
