如何使用 tcpdump 在 Linux 中捕获网络流量

Linux 配备了大量的网络实用程序可供选择。 tcpdump 是一种功能强大的网络工具,如果您需要对 Linux 上的网络错误进行故障排除,它可以捕获和分析网络流量。

让我们动手操作 tcpdump 命令并探索如何使用它来捕获网络流量。

在 Linux 中安装 tcpdump

tcpdump 通常预装了所有主流 Linux 发行版和基于安全的替代品。 所以你应该可以通过输入立即使用它 tcpdumpsudo 字首。

如果您无法运行 tcpdump 命令并卡在“tcpdump:找不到命令” 错误,让我们学习如何在你的 Linux 机器上安装 tcpdump。

要安装 tcpdump,请启动终端并运行与您当前使用的 Linux 发行版相对应的命令:

在 Debian/Ubuntu 衍生产品上,运行:

sudo apt-get install tcpdump

在基于 Arch 的系统上,运行:

sudo pacman -S tcpdump

安装 tcpdump 实用程序 Fedora、CentOS 和 RHEL,发出以下命令:

sudo dnf install tcpdump

请注意,如果您被要求安装 libcap, 输入 是的 或者 因为它是一个核心依赖,没有它 tcpdump 将拒绝启动。 这应该安装 tcpdump 实用程序并解决“找不到命令”错误。

现在 tcpdump 已经安装在您的系统上,让我们探索它提供的不同选项和功能。

使用 tcpdump 捕获网络流量

tcpdump 提供了许多标志来修改其执行,但它也可以作为独立命令运行。 但是,在没有任何标志或参数的情况下运行 tcpdump 将忽略其全部潜力。 根据需要使用一些标志来调整执行和输出总是更好的。

键入此命令以使用 tcpdump 监视网络传输:

sudo tcpdump

现在 tcpdump 将开始自动捕获网络数据包,直到发送中断信号 Ctrl + Z 手动中断进程。 要限制捕获的数据包总数,请使用 -C 标记并在其旁边输入所需的数据包限制:

sudo tcpdump -c 5

如果您现在无法理解输出,则需要先熟悉 tcpdump 输出格式。

使用 tcpdump 检查可用的网络接口

默认情况下,tcpdump 从任何可用的网络接口捕获流量。 如果您有多个正在使用的活动网络接口,您可能需要定义 tcpdump 应该从中捕获数据包的网络接口。 要在特定接口上启动 tcpdump,您必须首先了解接口名称。

以下是使用 tcpdump 列出所有可用网络接口的方法:

sudo tcpdump -D

或者,您可以添加 –list-interfaces 标记到命令:

sudo tcpdump --list-interfaces

返回的输出包含 tcpdump 可以侦听的所有活动网络接口的列表。 要配置 tcpdump 以捕获来自特定网络接口的传输,请输入以下命令:

sudo tcpdump -i interface_id

或者,您可以添加 – 界面 标记到命令:

sudo tcpdump --interface interface_id

现在我们已经捕获了一些数据包,让我们仔细研究它们并了解如何调整输出以使其更具可读性。

探索 tcpdump 过滤器

tcpdump 能够在一次运行中捕获大量流量。 在调查或解决特定主机或网络协议的问题时,此类信息过载可能会使您偏离轨道。

这就是 tcpdump 过滤器发挥作用的地方。 您可以在 tcpdump 命令后附加某些标志,以过滤掉网络流量并捕获特定数据包。 然后,您可以存储这些数据包,然后对其进行分析,以找到任何与网络相关的问题的根源。 让我们学习如何在 tcpdump 中使用过滤器。

根据使用的网络协议过滤数据包

要过滤通过特定协议传输的数据包,请使用 tcpdump 命令输入协议名称,它只会捕获通过定义的网络协议传输的数据包。

例如,要捕获基于 ICMP 的数据包,您只需附加 icmp 在 tcpdump 命令的末尾。 如果您希望仅捕获 UDP 或 TCP 数据包,该过程是相同的。

sudo tcpdump -c 5 icmp

只有通过 ICMP 协议进行数据交换时,此命令才会返回输出。

根据主机过滤数据包

您可以配置 tcpdump 以捕获与单个主机相关的数据包 主持人 范围。 当您的网络中的所有系统都在运行时,这尤其有用,除了一个。 此过滤器可让您执行有针对性的调查并加快整体故障排除工作流程,因为您不会被不必要的数据分心。

要捕获与特定主机相关的数据包,请使用 主持人 范围:

sudo tcpdump -c 5 host 192.168.2.1

与网络协议过滤器类似,此命令仅在任何正在进行的传输与定义的主机相关时才返回输出。

根据活动端口过滤数据包

tcpdump 配备了一个参数,可让您过滤网络流量并仅捕获传入或传出特定端口的数据包。

要捕获来自特定端口的数据包,请附加 港口 标记到 tcpdump 命令并在其旁边定义端口号。 例如,要捕获任何传入或传出的 HTTP 流量,请定义端口 80:

sudo tcpdump -c 5 port 80

tcpdump 将侦听端口 80,等待 HTTP 传输。 一旦它检测到网络中的 HTTP 数据包,它就会捕获它们。

将过滤器组合在一起以进行高级排序

前几节讨论了如何根据端口、协议或主机过滤流量,但如果您想使用特定网络协议从特定主机的单个端口捕获流量怎么办? 好吧,您很幸运,因为这是可能的,这归功于 tcpdump 命令使用逻辑运算符的能力。

要使用端口 443 从单个主机捕获数据包,请使用以下命令:

sudo tcpdump -c 5 host 192.168.2.1 and port 443

检查抓包内容

默认情况下,tcpdump 在输出中显示数据包的标头。 虽然在大多数情况下已经足够了,但有时,您可能想要或需要更深入地查看捕获的数据。 您可以使用 tcpdump 命令传递某些参数来检查捕获的包的内容。

以下是查看数据包内容的方法:

sudo tcpdump -c 5 -x

此命令返回捕获数据包中内容的十六进制版本。 如果您想查看 ASCII 格式的数据,您可以通过 -一个 参数:

sudo tcpdump -A

Save tcpdump 输出到文件

与几乎所有其他 Linux 命令行工具一样,您可以将 tcpdump 生成的输出存储到文件中以供以后引用。

这可以通过添加 -w 标记到命令。 执行后,tcpdump 会将捕获的数据存储到一个 .pcap 以后可以使用 tcpdump 或其他网络监控工具(如 Wireshark)分析该文件。

键入此命令以将 tcpdump 命令的输出存储到文件中:

sudo tcpdump -w capture.pcap

阅读一个 .pcap 文件,您可以将 tcpdump 与 -r 范围:

sudo tcpdump -r capture.pcap

适用于 Linux 的最佳网络工具

Linux 附带了大量的网络工具,只要它是在软件方面,就可以解决所有网络问题。 知道如何在 Linux 中使用一些最好的网络工具肯定会派上用场,无论您是管理网络的系统管理员还是日常 Linux 用户。

由于可用网络命令的实际列表可能难以理解,因此这里列出了一些您应该知道的最重要的 Linux 网络工具。