tcpdump 命令的更多示例
许多其他选项和参数可以与 tcpdump 一起使用。
以下是 tcpdump 实用程序强大功能的一些具体示例。
1.显示2台主机之间的流量
要显示两台主机之间的所有流量(由变量 host1 和 host2 表示):
# tcpdump host host1 and host2
2. 仅显示来自源主机或者目标主机的流量
仅显示来自源 (src) 或者目标 (dst) 主机的流量:
# tcpdump src host # tcpdump dst host
3. 显示特定协议的流量
提供协议作为参数以仅显示特定协议的流量,例如 tcp、udp、icmp、arp:
# tcpdump protocol
例如,仅显示 tcp 流量的流量:
# tcpdump tcp
4. 基于源或者目的端口过滤
根据源或者目标端口进行过滤:
# tcpdump src port ftp # tcpdump dst port http
tcpdump 实用程序还接受布尔运算符(AND、NOT、OR)和运算符分组,允许我们创建复杂的过滤器来捕获网络数据。
tcpdump 实用程序允许我们捕获在网络中流动的数据包,以帮助进行网络故障排除。
以下是使用具有不同选项的 tcpdump 的几个示例。
根据指定的过滤器捕获流量。
存在多种选择,包括:
选项 | 说明 |
---|---|
-D | 打印网络接口列表。 |
-i | 指定要捕获的接口。 |
-c | 指定要接收的数据包数。 |
-v, -vv, -vvv | 增加输出的详细程度。 |
-w | 将捕获的数据写入文件。 |
-r | 从文件中读取捕获的数据。 |
安装 tcpdump 实用程序
在大多数 unix/linux 系统上,我们不会找到已经安装的 tcpdump 包。
要安装最新版本,请在系统上使用适当的包管理器。
例如,在 CentOS/RHEL 服务器的情况下:
# yum install tcpdump
使用 tcpdump 进行网络故障排除的示例
1. 显示网络接口列表
要打印 tcpdump 可以捕获数据包的可用网络接口列表:
# tcpdump -D 1.eth0 2.nflog (Linux netfilter log (NFLOG) interface) 3.nfqueue (Linux netfilter queue (NFQUEUE) interface) 4.any (Pseudo-device that captures on all interfaces) 5.lo [Loopback]
2. 特定接口上的捕获
从 'tcpdump -D' 命令可以看出,对于每个网络接口,都会打印一个编号和一个接口名称。
可以将接口名称或者编号提供给 -i 标志以指定要捕获的接口。
例如,要捕获接口 eth0 上的数据包:
# tcpdump -i 1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 01:26:51.118038 IP ec2-54-159-106-120.compute-1.amazonaws.com.48021 > onitroad.31297: Flags [S], seq 3960153353, win 26883, options [mss 1460,sac kOK,TS val 2229362922 ecr 0,nop,wscale 7], length 0 01:26:51.118072 IP onitroad.31297 > ec2-54-159-106-120.compute-1.amazonaws.com.48021: Flags [S.], seq 547340507, ack 3960153354, win 26847, optio ns [mss 8961,sackOK,TS val 5714985 ecr 2229362922,nop,wscale 7], length 0
在本例中,输出是连续的,直到按 Ctrl + C 终止。
3. 只捕获特定数量的数据包
要在收到特定数量的数据包后退出 tcpdump,请使用 -c(计数)选项,后跟要接收的数据包数量。
以下示例捕获两个数据包:
# tcpdump -i 1 -c 2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 01:37:08.956549 IP 182.100.67.76.38819 > onitroad.ssh: Flags [P.], seq 542149092:542149176, ack 774431931, win 271, options [nop,nop,TS val 26493 51 ecr 6332468], length 84 01:37:08.956575 IP onitroad.ssh > 182.100.67.76.38819: Flags [.], ack 84, win 230, options [nop,nop,TS val 6332824 ecr 2649351], length 0 2 packets captured 6 packets received by filter 0 packets dropped by kernel
如本例所示,tcpdump抓包完成后,报告如下:
- 捕获的数据包:这是 tcpdump 已接收和处理的数据包数量。
- 过滤器接收的数据包:可以在命令行上指定过滤器,只有那些与定义的过滤器匹配的数据包才会被 tcpdump 处理并计数。
- 内核丢弃的数据包:这是由于缺少缓冲区空间而丢弃的数据包数量。使用 -B 选项设置缓冲区大小。
4.增加输出的细节(verbosity)
要增加输出的细节(详细程度),请使用 -v 选项,或者 -vv 用于更详细的输出,或者 -vvv 用于最详细的输出级别:
# tcpdump -i 1 -v # tcpdump -i 1 -vv # tcpdump -i 1 -vvv
5. 将数据捕获到文件中
使用带有 -w 选项的 tcpdump 实用程序允许我们将捕获的数据写入文件。
这允许其他网络分析工具(例如 Wireshark)读取捕获的数据。
以下示例将数据捕获到名为 capture.out 的文件中:
# tcpdump -i 1 -v -c2 -w capture.out
6.读取捕获的数据
我们还可以使用 -r 选项从文件中读取捕获的数据:
# tcpdump -r capture_file