Linux 配备了大量的网络实用程序可供选择。tcpdump 是一种功能强大的网络工具,如果您需要对 Linux 上的网络错误进行故障排除,它可以捕获和分析网络流量。
让我们动手操作 tcpdump 命令并探索如何使用它来捕获网络流量。
在 Linux 中安装 tcpdump
tcpdump 通常预装了所有主流 Linux 发行版和基于安全的替代品。因此,您应该可以通过输入带有sudo前缀的tcpdump来立即使用它。
如果您无法运行 tcpdump 命令并遇到“ tcpdump: command not found ”错误,让我们学习如何在您的 Linux 机器上安装 tcpdump。
要安装 tcpdump,请启动终端并运行与您当前使用的 Linux 发行版相对应的命令:
在 Debian/Ubuntu 衍生产品上,运行:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo apt-get install tcpdump
在基于 Arch 的系统上,运行:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo
pacman -S tcpdump
要在 Fedora、CentOS 和 RHEL 上安装 tcpdump 实用程序,请发出以下命令:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo dnf install tcpdump
请注意,如果要求您安装libcap,请输入Yes或Y,因为它是核心依赖项,否则 tcpdump 将拒绝启动。这应该安装 tcpdump 实用程序并解决“找不到命令command not found”错误。
现在 tcpdump 已经安装在您的系统上,让我们探索它提供的不同选项和功能。
使用 tcpdump 捕获网络流量
tcpdump 提供了许多标志来修改其执行,但它也可以作为独立命令运行。但是,在没有任何标志或参数的情况下运行 tcpdump 将忽略其全部潜力。根据需要使用一些标志来调整执行和输出总是更好的。
键入此命令以使用 tcpdump 监视网络传输:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump
现在 tcpdump 将开始自动捕获网络数据包,直到使用Ctrl + Z发送中断信号以手动中断进程。要限制捕获的数据包总数,请使用-c标志并在其旁边输入所需的数据包限制:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 5
如果您现在无法理解输出,则需要先熟悉 tcpdump 输出格式:https://www.linuxmi.com/linux-tcpdump-shili.html
使用 tcpdump 检查可用的网络接口
默认情况下,tcpdump 从任何可用的网络接口捕获流量。如果您有多个正在使用的活动网络接口,您可能需要定义 tcpdump 应该从中捕获数据包的网络接口。要在特定接口上启动 tcpdump,您必须首先了解接口名称。
以下是使用 tcpdump 列出所有可用网络接口的方法:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -D
或者,您可以将–list-interfaces标志添加到命令中:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --list-interfaces
返回的输出包含 tcpdump 可以侦听的所有活动网络接口的列表。要配置 tcpdump 以捕获来自特定网络接口的传输,请输入以下命令:
sudo tcpdump -i interface_id
或者,您可以将–interface标志添加到命令中:
sudo tcpdump --interface interface_id
现在我们已经捕获了一些数据包,让我们仔细研究它们并了解如何调整输出以使其更具可读性。
探索 tcpdump 过滤器
tcpdump 能够在一次运行中捕获大量流量。在调查或解决特定主机或网络协议的问题时,此类信息过载可能会使您偏离轨道。
这就是 tcpdump 过滤器发挥作用的地方。您可以在 tcpdump 命令后附加某些标志,以过滤掉网络流量并捕获特定数据包。然后,您可以存储这些数据包,然后对其进行分析,以找到任何与网络相关的问题的根源。让我们学习如何在 tcpdump 中使用过滤器。
(1) 根据使用的网络协议过滤数据包
要过滤通过特定协议传输的数据包,请使用 tcpdump 命令输入协议名称,它只会捕获通过定义的网络协议传输的数据包。
例如,要捕获基于 ICMP 的数据包,您只需在 tcpdump 命令的末尾附加icmp 。如果您希望仅捕获 UDP 或 TCP 数据包,则该过程是相同的。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 icmp
只有通过 ICMP 协议进行数据交换时,此命令才会返回输出。
(2) 根据主机过滤数据包
您可以配置 tcpdump 以使用host参数捕获与单个主机相关的数据包。当您的网络中的所有系统都在运行时,这尤其有用,除了一个。此过滤器可让您执行有针对性的调查并加快整体故障排除工作流程,因为您不会被不必要的数据分心。
要捕获与特定主机相关的数据包,请使用主机参数定义主机的网络地址:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 host 192.168.174.135
与网络协议过滤器类似,此命令仅在任何正在进行的传输与定义的主机相关时才返回输出。
(3) 根据活动端口过滤数据包
tcpdump 配备了一个参数,可让您过滤网络流量并仅捕获传入或传出特定端口的数据包。
要捕获来自特定端口的数据包,请将端口标志附加到 tcpdump 命令并在其旁边定义端口号。例如,要捕获任何传入或传出的 HTTP 流量,请定义端口 80:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 port 80
tcpdump 将侦听端口 80,等待 HTTP 传输。一旦它检测到网络中的 HTTP 数据包,它就会捕获它们。
(4) 将过滤器组合在一起以进行高级排序
前几节讨论了如何根据端口、协议或主机过滤流量,但如果您想使用特定网络协议从特定主机的单个端口捕获流量怎么办?好吧,您很幸运,因为这是可能的,这归功于 tcpdump 命令使用逻辑运算符的能力。
要使用端口 443 从单个主机捕获数据包,请使用以下命令:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 host 192.168.174.135 and port 443
检查抓包内容
默认情况下,tcpdump 在输出中显示数据包的标头。虽然在大多数情况下已经足够了,但有时,您可能想要或需要更深入地查看捕获的数据。您可以使用 tcpdump 命令传递某些参数来检查捕获的包的内容。
以下是查看数据包内容的方法:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -c 3 -x
此命令返回捕获数据包中内容的十六进制版本。如果您希望查看数据的 ASCII 格式,可以使用-A参数传递:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -A
将 tcpdump 输出保存到文件
与几乎所有其他 Linux 命令行工具一样,您可以将 tcpdump 生成的输出存储到文件中以供以后引用。
这可以通过在命令中添加-w标志来完成。执行后,tcpdump 会将捕获的数据存储到.pcap文件中,以后可以使用 tcpdump 或其他网络监控工具(如 Wireshark)对其进行分析。
键入此命令以将 tcpdump 命令的输出存储到文件中:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -w linuxmi.pcap
要读取.pcap文件,可以使用带有-r参数的 tcpdump:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump -r linuxmi.pcap
适用于 Linux 的最佳网络工具
Linux 附带了大量的网络工具,只要它是在软件方面,就可以解决所有网络问题。知道如何在 Linux 中使用一些最好的网络工具肯定会派上用场,无论您是管理网络的系统管理员还是日常 Linux 用户。
由于可用网络命令的实际列表可能难以理解,因此这里列出了一些您应该知道的最重要的 Linux 网络工具。