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 实用程序允许我们捕获在网络中流动的数据包,以帮助进行网络故障排除。
以下是使用具有不同选项的 tcpdump 的几个示例。
根据指定的过滤器捕获流量。
存在多种选择,包括:

选项说明
-D打印网络接口列表。
-i指定要捕获的接口。
-c指定要接收的数据包数。
-v, -vv, -vvv增加输出的详细程度。
-w将捕获的数据写入文件。
-r从文件中读取捕获的数据。

安装 tcpdump 实用程序

在大多数 unix/linux 系统上,我们不会找到已经安装的 tcpdump 包。
要安装最新版本,请在系统上使用适当的包管理器。
例如,在 CentOS/RHEL 服务器的情况下:

# yum install tcpdump
欢迎 on it road

使用 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
日期:2020-09-17 00:14:43 来源:oir作者:oir