如何使用 tcpdump 和 6 个示例

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

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

什么是 tcpdump 命令?

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

系统管理员还可以将 tcpdump 实用程序与 cron 为了自动化各种任务,例如日志记录。 由于其众多功能使其非常通用,因此 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连接完成
数据被推送
RSTR连接已重置
确认.致谢

输出还可以包含多个 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 也可能有点挑战。 但是,如果您使用正确的工具,那就轻而易举了。