您是否正在尝试捕获数据包以分析网络上的流量?也许您是一名服务器管理员,遇到了问题并想要监控网络上传输的数据。无论情况如何,tcpdump Linux 实用程序都是您所需要的。
在本文中,我们将详细讨论 tcpdump 命令,以及一些有关如何在 Linux 系统上安装和使用 tcpdump 的指南。
什么是 tcpdump 命令?
Tcpdump 是一个强大的网络监控工具,它允许用户有效地过滤网络上的数据包和流量。您可以获得有关 TCP/IP 和网络上传输的数据包的详细信息。Tcpdump 是一个命令行实用程序,这意味着您可以在没有显示的 Linux 服务器上运行它。
系统管理员还可以将 tcpdump 实用程序与cron集成,以便自动执行各种任务,例如日志记录。由于其众多功能使其非常通用,因此 tcpdump 既可以用作故障排除工具,也可以用作安全工具。
如何在 Linux 上安装 tcpdump
虽然大多数时候您会发现 tcpdump 预装在您的系统上,但某些 Linux 发行版并未随附该软件包。因此,您可能必须在系统上手动安装该实用程序。
您可以使用which命令检查系统上是否安装了 tcpdump 。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ which tcpdump
如果输出显示目录路径 ( /usr/bin/tcpdump ),则您的系统已安装该软件包。但是,如果没有,您可以使用系统上的默认包管理器轻松完成。
要在基于 Debian 的发行版(例如 Ubuntu)上安装 tcpdump:
┌──(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
请注意,tcpdump 包需要libcap作为依赖项,因此请确保您也将其安装在系统上。
在 Linux 上捕获网络数据包的 Tcpdump 示例
现在您已经在 Linux 机器上成功安装了 tcpdump,是时候监控一些数据包了。由于 tcpdump 需要超级用户权限才能执行大多数操作,因此您必须将sudo添加到您的命令中。
1.列出所有网络接口
要检查哪些网络接口可用于捕获,请在 tcpdump 命令中使用-D标志。
tcpdump -D
将--list-interfaces标志作为参数传递将返回相同的输出。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --list-interfaces
输出将是系统上存在的所有网络接口的列表。
获得网络接口列表后,是时候通过捕获系统上的数据包来监控网络了。尽管您可以指定要使用的接口,但any参数命令 tcpdump 使用任何活动接口捕获网络数据包。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any
系统将显示以下输出。
2. tcpdump 输出格式
从第三行开始,输出的每一行表示 tcpdump 捕获的特定数据包。这是单个数据包的输出的样子。
16:23:44.545056 eth0 Out IP linuxmi.40016 > 120.253.255.102.https: Flags [P.], seq 1007723650:1007723689, ack 1485464298, win 62780, length 39
请记住,并非所有数据包都以这种方式捕获,但这是大多数数据包遵循的一般格式。
输出包含以下信息。
接收数据包的时间戳
接口名称
包流
网络协议名称
IP 地址和端口详细信息
TCP 标志
数据包中数据的序号
确认数据
窗口大小
数据包长度
个字段 ( 16:23:44.545056 ) 显示系统发送或接收数据包时的时间戳。记录的时间是从您系统的本地时间中提取的。
第二个和第三个字段表示使用的接口和数据包的流向。在上面的代码片段中,eth0是无线接口的名称,Out是数据包流。
第四个字段包括与网络协议名称有关的信息。通常,您会发现两种协议- IP和IP6,其中 IP 表示 IPV4,IP6 表示 IPV6。
下一个字段包含 IP 地址或源和目标系统的名称。IP 地址后跟端口号。
输出中的第六个字段由 TCP 标志组成。tcpdump 输出中使用了各种标志。
标志名称 | 值 | 描述 |
---|---|---|
SYN | S | 连接开始 |
FIN | F | 连接完成 |
PUSH | O | 数据被推送 |
RST | R | 连接已重置 |
ACK | . | 确认 |
输出还可以包含多个 TCP 标志的组合。例如,FLAG [f.]代表一个 FIN-ACK 包。
在输出片段中进一步移动,下一个字段包含数据包中数据的序列号 ( seq 1007723650:1007723689 )。个数据包总是有一个正整数值,随后的数据包使用相对序列号来改善数据流。
下一个字段包含确认号(ack 1485464298)或简单的确认号。在发送方机器中捕获的数据包有 1485464298 作为确认号。在接收端,Ack 号是下一个数据包的值。
输出中的第九个字段包含窗口大小(win 62780),即接收缓冲区中可用的字节数。窗口大小后面还有几个其他字段,包括大段大小 (MSS)。
后一个字段(length 39)包含 tcpdump 捕获的整个数据包的长度。
3.限制抓包数
次运行 tcpdump 命令时,您可能会注意到系统会继续捕获网络数据包,直到您传递中断信号。您可以通过使用-c标志预先指定要捕获的数据包计数来覆盖此默认行为。
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 3
上述命令将从任何活动的网络接口捕获3个数据包。
4.根据字段过滤数据包
当您对问题进行故障排除时,在终端上获取大量文本输出并不会使其变得更容易。这就是 tcpdump 中的过滤功能发挥作用的地方。您可以根据主机、协议、端口号等各种字段过滤数据包。
要仅捕获 TCP 数据包,请键入:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 5 tcp
同样,如果要使用端口号过滤输出:
┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 5 port 50
上述命令只会检索通过指定端口传输的数据包。
要获取特定主机的数据包详细信息:
tcpdump --interface any -c 5 host 112.123.13.145
如果要过滤特定主机发送或接收的数据包,请在命令中使用src或dst参数。
tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145
您还可以使用逻辑运算符and和or将两个或多个表达式组合在一起。例如,要获取属于源 IP 112.123.13.145的数据包并使用端口80:
tcpdump --interface any -c 10 src 112.123.13.145 and port 80
可以使用括号将复杂表达式组合在一起,如下所示:
tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.
234) and (port 45 or port 80)"
5.查看包的内容
您可以在 tcpdump 命令中使用-A和-x标志来分析网络数据包的内容。-A 标志代表ASCII格式,-x表示十六进制格式。
查看系统捕获的下一个网络数据包的内容:
tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x
6. 将捕获数据保存到文件
如果您想保存捕获数据以供参考,tcpdump 可以帮助您。只需使用默认命令传递-w标志即可将输出写入文件而不是在屏幕上显示。
tcpdump --interface any -c 10 -w data.pcap
.pcap文件扩展名代表数据包捕获数据。您还可以使用-v标志以详细模式发出上述命令。
tcpdump --interface any -c 10 -w data.pcap -v
要使用 tcpdump 读取.pcap文件,请使用-r标志,后跟文件路径。-r代表读取。
tcpdump -r data.pcap
您还可以从文件中保存的数据包数据中过滤网络数据包。
tcpdump -r data.pcap port 80
在 Linux 上监控网络流量
来自:Linux迷
链接:https://www.linuxmi.com/linux-tcpdump-shili.html