如何使用 tcpdump 在 Linux 中捕获网络流量
tcpdump 是一个网络实用程序,用于捕获传入和传出流量。以下是您需要了解的有关在 Linux 上使用 tcpdump 的所有信息。
Linux 配备了大量可供选择的网络实用程序。 tcpdump 是一种功能强大的网络工具,如果您需要排除 Linux 上的网络错误,它可以捕获和分析网络流量。
让我们亲自使用 tcpdump 命令并探索如何使用它来捕获网络流量。
在 Linux 中安装 tcpdump
tcpdump 通常预装在所有主流 Linux 发行版和基于安全的替代版本中。因此,您应该能够通过输入带有 sudo 前缀的 tcpdump 立即使用它。
如果您无法运行 tcpdump 命令并遇到“tcpdump:找不到命令”错误,让我们了解如何在 Linux 计算机上安装 tcpdump。
要安装 tcpdump,请启动终端并运行与您当前使用的 Linux 发行版相对应的命令:
在 Debian/Ubuntu 衍生版本上,运行:
sudo apt-get install tcpdump
在基于 Arch 的系统上,运行:
sudo pacman -S tcpdump
要在 Fedora、CentOS 和 RHEL 上安装 tcpdump 实用程序,请发出以下命令:
sudo dnf install tcpdump
请注意,如果要求您安装 libcap,请输入 Yes 或 Y,因为它是核心依赖项,否则 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
或者,您可以将 --interface 标志添加到命令中:
sudo tcpdump --interface interface_id
现在我们已经捕获了一些数据包,让我们仔细研究它们并了解如何调整输出以使其更具可读性。
探索 tcpdump 过滤器
tcpdump 能够在单次运行中捕获大量流量。在调查或排除特定主机或网络协议的问题时,此类信息过载可能会让您偏离正轨。
这就是 tcpdump 过滤器发挥作用的地方。您可以在 tcpdump 命令后附加某些标志来过滤网络流量并捕获特定数据包。然后,您可以存储这些数据包并稍后对其进行分析,以找到任何与网络相关的问题的根源。让我们学习如何在 tcpdump 中使用过滤器。
根据使用的网络协议过滤数据包
要过滤通过特定协议传输的数据包,请使用 tcpdump 命令输入协议名称,它只会捕获通过定义的网络协议传输的数据包。
例如,要捕获基于 ICMP 的数据包,您只需在 tcpdump 命令末尾附加 icmp 即可。如果您只想捕获 UDP 或 TCP 数据包,过程是相同的。
sudo tcpdump -c 5 icmp
仅当通过 ICMP 协议进行数据交换时,此命令才会返回输出。
根据主机过滤数据包
您可以使用 host 参数配置 tcpdump 以捕获与单个主机相关的数据包。当网络中除一个系统外的所有系统都正常运行时,这一点尤其有用。此过滤器可让您执行有针对性的调查并加快整体故障排除工作流程,因为您不会因不必要的数据而分心。
要捕获与特定主机相关的数据包,请使用 host 参数定义主机的网络地址:
sudo tcpdump -c 5 host 192.168.2.1
与网络协议过滤器类似,只有当任何正在进行的传输与定义的主机相关时,此命令才会返回输出。
根据活动端口过滤数据包
tcpdump 配备了一个参数,可让您过滤网络流量并仅捕获传输到特定端口或从特定端口传输的数据包。
要捕获来自特定端口的数据包,请将 port 标志附加到 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 形式,您可以传递 -A 参数:
sudo tcpdump -A
将 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 网络工具。