在 Linux 中使用 tcpdump 嗅探数据包
监视通过网络的所有这些数据包的过程称为嗅探。网络管理员通常使用嗅探器来排除故障并监控网络流量。攻击者使用这些嗅探器捕获和监控数据包,以窃取敏感的用户帐户信息,例如密码、用户名和位置。
网络数据包是通过数据包交换网络、计算机网络(例如互联网)分组和传输的基本数据单元。
您还可以使用捕获通过网络接口的所有数据包的软件来监视和拦截网络上的流量。您也可以使用硬件工具执行相同的操作,因为嗅探器既可以作为软件也可以作为硬件使用。在本指南中,我们将了解如何在 Linux 中使用 tcpdump 处理嗅探数据包。
在 Linux 中使用 tcpdump 嗅探数据包
Tcpdump 是 Linux 系统管理员用来解决连接问题的数据包分析和嗅探工具。有时,您可以出于安全目的使用此工具。该工具主要分析、过滤和捕获通过系统的网络流量,例如 IP/TCP 数据包。
它以 .pcap 文件扩展名收集捕获的信息,您只能借助命令工具或 Wireshark 打开该文件。 tcpdump 作为各种 Linux 发行版中预安装的实用程序提供。但是,您可以通过以下命令安装它 -
sudo apt install tcpdump (for Ubuntu/Debian-based distros)
yum install tcpdump (for RedHat-based Linux distros)
sudo pacman -S tcpdump (for Arch Linux)
您还可以从 tcpdump 命令的帮助页面获取有关 tcpdump 命令的简要信息 -
~$: tcpdump --h
现在让我们看看您可以在 tcpdump 中尝试捕获网络数据包的不同选项的一些示例。
显示所有可用的网络接口
将 -D 选项与 tcpdump 命令一起使用将列出系统的可用网络接口。
~$: sudo tcpdump -D
[sudo] password for prateek:
1.enp0s3 [Up, Running, Connected]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
5.nflog (Linux netfilter log (NFLOG) interface) [none]
6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
7.dbus-system (D-Bus system bus) [none]
8.dbus-session D-Bus session bus none
从上面的输出中,您可以看到每个网络接口的状态。 Tcpdump 创建一个名为“any”的伪设备,而不是实际的网络接口。因此,通过侦听该伪设备,该工具捕获通过所有接口的数据包。
嗅探网络接口
您可以使用以下命令捕获当前的网络接口 -
~$: sudo tcpdump
使用 tcpdump 的各种选项嗅探数据包
您可以通过多种不同的方式和不同的格式捕获网络接口,其列表如下 -
如果您想从特定网络接口捕获数据包,请使用 -i 选项 -
~$: sudo tcpdump -i <network_interface>
同样,使用 tcpdump 命令的 -c 选项来捕获特定数量的数据包 -
~$: sudo tcpdump -c <number of packets> -i <network_interface>
例如,让我们通过 tcpdump 命令从“lo”接口捕获 2 个数据包 -
~$: sudo tcpdump -c 2 -i lo
在接口名称后面,您可以使用“tcp”仅捕获 tcp 数据包。
~$: sudo tcpdump -i <network_interface> tcp
让我们捕获“lo”网络的 tcp 数据包 -
~$: sudo tcpdump -i lo tcp
tcpdump 命令的 -XX 标志以十六进制和 ASCII 格式打印值。
~$: sudo tcpdump -XX -i <network_interface>
添加 - A 以及仅以 ASCII 格式打印数据包的命令。
~$: sudo tcpdump -A -i <network_interface>
显示时间戳信息
Tcpdump 将时间戳添加到每个数据包转储输出的第一列,以指示捕获数据包的时间。通过此命令,您可以使用 -t 标志来支持时间戳输出的格式。
~$: sudo tcpdump -t
使用上述命令时,不会打印任何时间戳信息。
您还可以打印纪元时间中的时间戳。在计算中,它是计算机时间戳和时钟确定值的相对时间和日期。 1970 年 1 月 1 日,UTC 时间 00:00:00,被称为 Unix 纪元。
为了便于计算,使用这些纪元作为单个数字来维护时间参考。使用 -tt 选项命令,您可以打印纪元时间中的时间戳 -
~$: sudo tcpdump -tt
您还可以以增量时间格式打印时间戳的输出。增量时间是完成最后一帧所花费的时间。您可以使用 -ttt 标志和 tcpdump 命令以增量时间打印输出。
~$: sudo tcpdump -ttt
使用 -tttt 标志打印带有日期的时间戳
~$: sudo tcpdump -tttt
捕获特定接口上的IP地址数据包
您可以在命令中添加 -u 选项来显示特定接口上的 IP 地址数据包,如下所示 -
~$: sudo tcpdump -n -i <network_interface>
例如,我们捕获“lo”网络上的 IP 地址数据包。
~$: sudo tcpdump -n -i lo
捕获数据包并将其保存到文件中
您可以保存 IP/TCP 数据包并在将来分析它们。使用 tcpdump 命令,您可以使用 -w 选项将这些数据包保存到文件中。请记住,这些文件的扩展名应始终为 .pcap,它代表数据包捕获。
~$: sudo tcpdump -w <file_name.pcap> -i <network_interface>
在本例中,我们将“enp0s3”接口数据包保存在“prateek.pcap”命名文件中。 (~$: sudo tcpdump -w <文件名.pcap> -i <网络接口>)
~$: sudo tcpdump -w prateek.pcap -i enp0s3
[sudo] password for prateek:
tcpdump: listening on ep0s3, link-type EN10MB (Ethernet), snapshot length 262144 bytes
此外,您可以通过 -c 选项限制或设置每个文件的特定大小 -
~$: sudo tcpdump -w prateek.pcap -i enp0s3 -C 3
这里的 3 代表 3MB,即当“prateek.pcap”文件大小达到 3MB 时,tcpdump 将每 3MB 增量创建更多这样的文件,如 prateek pcap1、prateek.pcap2 等。
从保存的文件中读取捕获的数据包
我们保存捕获的数据包的文件,我们可以使用 -r 标志读取它们,如下所示。
~$: sudo tcpdump -r <file_name.pcap> -i <network_interface>
在上面的示例中,我们保存了“prateek.pcap”文件。我们可以使用“-r”选项从此文件中读取数据包,如下所示 -
~$: sudo tcpdump -r prateek.pcap -i enp0s3
结论
在本指南中,我们了解了如何在 Linux 中使用 tcpdump 嗅探数据包。您可以使用不同的标志来呈现数据包和文件,我们在本指南中给出了许多示例。
本指南将帮助您使用 tcpdump 捕获和分析 TCP/IP 数据包。此外,如果您想了解有关 tcpdump 命令的附加选项的更多信息,请使用 -h 选项。