第1个回答 2024-08-18
在尝试分析网络流量时,tcpdump Linux 实用程序是您的得力助手。无论是服务器管理员遇到问题需要监控数据,还是其他任何需要捕获数据包的情况,tcpdump 都是您不可或缺的工具。
本文将深入探讨 tcpdump 命令,并提供在 Linux 系统上安装和使用的详细指南。
什么是 tcpdump 命令?
Tcpdump 是一款功能强大的网络监控工具,允许用户高效地过滤网络上的数据包和流量。它能提供有关 TCP/IP 以及网络上传输的数据包的详细信息。作为一个命令行实用程序,tcpdump 能够在没有图形界面的 Linux 服务器上运行。系统管理员还可以将 tcpdump 与 cron 集成,实现自动任务执行,如日志记录。由于其功能丰富,tcpdump 既可以作为故障排除工具,也可以作为安全工具。
如何在 Linux 上安装 tcpdump
尽管大多数情况下 tcpdump 都会预装在您的系统上,但某些 Linux 发行版并未包含该软件包。因此,您可能需要在系统上手动安装该实用程序。
您可以使用 which 命令检查系统上是否已安装 tcpdump。
如果输出显示目录路径 (/usr/bin/tcpdump),则说明您的系统已安装该软件包。如果没有,您可以使用系统上的默认包管理器轻松安装。
要在基于 Debian 的发行版(例如 Ubuntu)上安装 tcpdump:
在基于 Arch 的系统上,运行:
要在 Fedora、CentOS 和 RHEL 上安装 tcpdump 实用程序,请发出以下命令:
请注意,tcpdump 包需要 libcap 作为依赖项,因此请确保您也将其安装在系统上。
在 Linux 上捕获网络数据包的 Tcpdump 示例
现在您已经在 Linux 机器上成功安装了 tcpdump,是时候监控一些数据包了。由于 tcpdump 需要超级用户权限执行大多数操作,因此您必须将 sudo 添加到您的命令中。
1.列出所有网络接口
要检查哪些网络接口可用于捕获,请在 tcpdump 命令中使用 -D 标志。
将 --list-interfaces 标志作为参数传递将返回相同的输出。
输出将是系统上存在的所有网络接口的列表。
获得网络接口列表后,是时候通过捕获系统上的数据包来监控网络了。尽管您可以指定要使用的接口,但 any 参数命令 tcpdump 将使用任何活动接口捕获网络数据包。
2. tcpdump 输出格式
从第三行开始,输出的每一行表示 tcpdump 捕获的特定数据包。这是单个数据包输出的样子。
请记住,并非所有数据包都以这种方式捕获,但这是大多数数据包遵循的一般格式。
输出包含以下信息。
第一个字段 (16:23:44.545056) 显示系统发送或接收数据包时的时间戳。记录的时间是从您系统的本地时间中提取的。
第二个和第三个字段表示使用的接口和数据包的流向。在上面的代码片段中,eth0 是无线接口的名称,Out 是数据包流。
第四个字段包括与网络协议名称有关的信息。通常,您会发现两种协议-IP 和 IP6,其中 IP 表示 IPV4,IP6 表示 IPV6。
下一个字段包含 IP 地址或源和目标系统的名称。IP 地址后跟端口号。
输出中的第六个字段由 TCP 标志组成。tcpdump 输出中使用了各种标志。
输出还可以包含多个 TCP 标志的组合。例如,FLAG [f.] 代表一个 FIN-ACK 包。
在输出片段中进一步移动,下一个字段包含数据包中数据的序列号 (seq 1007723650:1007723689)。第一个数据包总是有一个正整数值,随后的数据包使用相对序列号来改善数据流。
下一个字段包含确认号(ack 1485464298)或简单的确认号。在发送方机器中捕获的数据包有 1485464298 作为确认号。在接收端,Ack 号是下一个数据包的值。
输出中的第九个字段包含窗口大小(win 62780),即接收缓冲区中可用的字节数。窗口大小后面还有几个其他字段,包括最大段大小 (MSS)。
最后一个字段(length 39)包含 tcpdump 捕获的整个数据包的长度。
3.限制抓包数
第一次运行 tcpdump 命令时,您可能会注意到系统会继续捕获网络数据包,直到您传递中断信号。您可以通过使用 -c 标志预先指定要捕获的数据包计数来覆盖此默认行为。
上述命令将从任何活动的网络接口捕获 3 个数据包。
4.根据字段过滤数据包
当您对问题进行故障排除时,在终端上获取大量文本输出并不会使其变得更容易。这就是 tcpdump 中的过滤功能发挥作用的地方。您可以根据主机、协议、端口号等各种字段过滤数据包。
要仅捕获 TCP 数据包,请键入:
同样,如果要使用端口号过滤输出:
上述命令只会检索通过指定端口传输的数据包。
要获取特定主机的数据包详细信息:
如果要过滤特定主机发送或接收的数据包,请在命令中使用 src 或 dst 参数。
您还可以使用逻辑运算符 and 和 or 将两个或多个表达式组合在一起。例如,要获取属于源 IP 112.123.13.145 的数据包并使用端口 80:
可以使用括号将复杂表达式组合在一起,如下所示:
5.查看包的内容
您可以在 tcpdump 命令中使用 -A 和 -x 标志来分析网络数据包的内容。-A 代表 ASCII 格式,-x 代表十六进制格式。
查看系统捕获的下一个网络数据包的内容:
6. 将捕获数据保存到文件
如果您想保存捕获数据以供参考,tcpdump 可以帮助您。只需使用默认命令传递 -w 标志即可将输出写入文件而不是在屏幕上显示。
.pcap 文件扩展名代表数据包捕获数据。您还可以使用 -v 标志以详细模式发出上述命令。
要使用 tcpdump 读取 .pcap 文件,请使用 -r 标志,后跟文件路径。-r 代表读取。
您还可以从文件中保存的数据包数据中过滤网络数据包。
如果您被分配了管理 Linux 服务器的任务,那么 tcpdump 命令是一个很好的工具,可以包含在您的武器库中。您可以通过实时捕获网络上传输的数据包轻松解决与网络相关的问题。
但在此之前,您的设备必须连接到互联网。对于 Linux 初学者来说,即使通过命令行连接 Wi-Fi 也可能有点挑战。但是,如果您使用正确的工具,那就轻而易举了。