怎样使用 tcpdump 和 6 个例子

您是否试图捕获数据包以分析网络上的流量? 也许您是一名服务器管理员,遇到了问题并希望监控网络上传输的数据。 无论情况怎样,tcpdump Linux 实用程序都是您所需要的。

在本文中,我们将详细讨论 tcpdump 命令,以及有关怎样在 Linux 系统上安装和使用 tcpdump 的一些指南。

什么是 tcpdump 命令?

转储 是一个强大的网络监控工具,允许用户有效地过滤网络上的数据包和流量。 您可以获得与 TCP/IP 和网络上传输的数据包相关的详细信息。 Tcpdump 是一个命令行实用程序,这意味着您可以在没有显示器的 Linux 服务器上运行它。

系统管理员还可以将 tcpdump 实用程序与 定时任务 以便自动执行各种任务,例如日志记录。 由于其众多功能使其非常通用,tcpdump 既可用作故障排除工具,也可用作安全工具。

怎样在 Linux 上安装 tcpdump

虽然大多数情况下您会发现系统上预装了 tcpdump,但某些 Linux 发行版并未附带该软件包。 因此,您可能必须在系统上手动安装该实用程序。

您可以使用以下命令检查系统上是否安装了 tcpdump 哪一个 命令。

which tcpdump

如果输出显示目录路径 (/usr/bin/tcpdump),则您的系统已安装该软件包。 但是,如果没有,您可以使用系统上的默认包管理器轻松完成。

要在基于 Debian 的发行版(例如 Ubuntu)上安装 tcpdump:

sudo apt-get install tcpdump

在 CentOS 上安装 tcpdump 也很容易。

sudo yum install tcpdump

在基于 Arch 的发行版上:

sudo pacman -S tcpdump

安装在 Fedora:

sudo dnf install tcpdump

请注意,tcpdump 包需要 libcap 作为依赖项,因此请确保将它也安装在您的系统上。

在 Linux 上捕获网络数据包的 Tcpdump 示例

现在您已经在 Linux 机器上成功安装了 tcpdump,是时候监控一些数据包了。 由于 tcpdump 需要超级用户权限才能执行大部分操作,因此您必须添加 sudo 到你的命令。

1. 列出所有网络接口

要检查哪些网络接口可用于捕获,请使用 -D 使用 tcpdump 命令标记。

tcpdump -D

通过 –list-interfaces flag 作为参数将返回相同的输出。

tcpdump --list-interfaces

输出将是系统上存在的所有网络接口的列表。

获得网络接口列表后,是时候通过捕获系统上的数据包来监视网络了。 虽然您可以指定要使用的接口,但 任何 参数命令 tcpdump 使用任何活动接口捕获网络数据包。

tcpdump --interface any

系统将显示以下输出。

2. tcpdump 输出格式

从第三行开始,输出的每一行表示tcpdump捕获的特定数据包。 以下是单个数据包的输出。

17:00:25.369138 wlp0s20f3 Out IP localsystem.40310 > kul01s10-in-f46.1e100.net.https: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 33

请记住,并非所有数据包都以这种方式捕获,但这是大多数数据包遵循的通用格式。

输出包含以下信息。

  1. 接收数据包的时间戳

  2. 接口名称

  3. 数据包流

  4. 网络协议名称

  5. IP 地址和端口详细信息

  6. TCP 标志

  7. 数据包中数据的序号

  8. 确认数据

  9. 窗口大小

  10. 数据包长度

第一个字段(17:00:25.369138) 显示系统发送或接收数据包时的时间戳。 记录的时间是从您系统的本地时间中提取的。

第二个和第三个字段表示使用的接口和数据包的流量。 在上面的片段中, wlp0s20f3 是无线接口的名称和 出去 是数据包流。

第四个字段包括与网络协议名称相关的信息。 通常,您会发现两种协议- 知识产权IP6,其中 IP 表示 IPV4,IP6 表示 IPV6。

下一个字段包含 IP 地址或源和目标系统的名称。 IP 地址后跟端口号。

输出中的第六个字段由 TCP 标志组成。 tcpdump 输出中使用了各种标志。

标志名称价值描述
同步连接开始
结尾F连接完成
数据被推送
RST电阻连接已重置
确认.致谢

输出还可以包含多个 TCP 标志的组合。 为了 example, 旗帜 [f.] 代表 FIN-ACK 数据包。

在输出片段中进一步移动,下一个字段包含序列号(序列 196:568) 数据包中的数据。 第一个数据包总是有一个正整数值,后面的数据包使用相对序列号来改善数据的流动性。

下一个字段保存确认号(确认 1),或简单的确认号。 在发送方机器中捕获的数据包有 1 作为确认号。 在接收端,Ack 编号是下一个数据包的值。

输出中的第九个字段容纳窗口大小(赢309),这是接收缓冲区中可用的字节数。 窗口大小之后还有其他几个字段,包括最大段大小 (MSS)。

最后一个字段(长度 33) 包含 tcpdump 捕获的整个数据包的长度。

3. 限制抓包数

首次运行 tcpdump 命令时,您可能会注意到系统会继续捕获网络数据包,直到您传递中断信号。 您可以通过使用预先指定要捕获的数据包计数来覆盖此默认行为 -C 旗帜。

tcpdump --interface any -c 10

上述命令将从任何活动的网络接口捕获十个数据包。

4. 根据字段过滤数据包

当您对问题进行故障排除时,在终端上获得一大块文本输出并不容易。 这就是 tcpdump 中的过滤功能发挥作用的地方。 您可以根据主机、协议、端口号等各种字段对数据包进行过滤。

要仅捕获 TCP 数据包,请键入:

tcpdump --interface any -c 5 tcp

同样,如果要使用端口号过滤输出:

tcpdump --interface any -c 5 port 50

上述命令只会检索通过指定端口传输的数据包。

要获取特定主机的数据包详细信息:

tcpdump --interface any -c 5 host 112.123.13.145

如果要过滤特定主机发送或接收的数据包,请使用 源文件 或者 日期 与命令的参数。

tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145

您还可以使用逻辑运算符 或者 将两个或多个表达式组合在一起。 为了 example, 获取属于源IP的数据包 112.123.13.145 并使用端口 80

tcpdump --interface any -c 10 src 112.123.13.145 and port 80

复杂的表达式可以组合在一起使用 括弧 如下:

tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.234) and (port 45 or port 80)"

5.查看数据包内容

您可以使用 -一种-X 使用 tcpdump 命令标记来分析网络数据包的内容。 这 -一种 旗帜代表 ASCII码 格式和 -X 表示 十六进制 格式。

查看系统捕获的下一个网络数据包的内容:

tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x

6. Save 将数据捕获到文件

如果您想保存捕获数据以供参考,tcpdump 可以帮助您。 只需通过 -w 使用默认命令标记将输出写入文件而不是在屏幕上显示。

tcpdump --interface any -c 10 -w data.pcap

.pcap 文件扩展名代表 抓包 数据。 您还可以使用在详细模式下发出上述命令 -v 旗帜。

tcpdump --interface any -c 10 -w data.pcap -v

阅读一个 .pcap 使用 tcpdump 的文件,使用 -r 标志后跟文件路径。 这 -r 代表 .

tcpdump -r data.pcap

您还可以从文件中保存的数据包数据中过滤网络数据包。

tcpdump -r data.pcap port 80

在 Linux 上监控网络流量

如果您被分配了管理 Linux 服务器的任务,那么 tcpdump 命令是一个很好的工具,可以包含在您的武器库中。 通过实时捕获网络上传输的数据包,您可以轻松解决与网络相关的问题。

但在此之前,您的设备必须连接到互联网。 对于 Linux 初学者来说,即使是通过命令行连接 Wi-Fi 也会有点挑战。 但是,如果您使用了正确的工具,那就轻而易举了。