Linux 中的 tcpdump 命令教程

tcpdump command 是一个 Linux 实用程序,它允许用户捕获传入和传出系统的网络数据包。 在本文中,我们将学习如何使用以下方法提取和检查网络数据包 tcpdump 命令。

虽然不太可能,但可能会发生一个系统可能没有 tcpdump 安装。 在这种情况下,任何 Ubuntu/Debian 用户都可以输入以下命令:

sudo apt install tcpdump 

其他 Linux 用户可以安装它,使用他们的标准安装命令,然后 tcpdump. 此外,网络数据有时包含机密信息,因此,要访问数据包,我们需要root 权限。 它可以通过 'sudo -s' 或者 'sudo su'. 如果你想了解更多关于这里的文章 sudo.

tcpdump 命令用例

让我们深入了解不同的用例和实用性。

1.使用tcpdump查找所有网络接口

必须注意的是,任何进入或退出系统的数据包都需要通过网络接口。 要获取所有可用网络接口的列表,我们使用以下命令:

tcpdump -D 
网络接口

除了网络接口的名称外,该命令还提供状态。

2.使用tcpdump命令捕获所有网络数据包

正如上面的输出中提到的, 'any' 可用于捕获通过所有网络接口的数据包。 这可以通过使用接口选项来完成 '-i'.

tcpdump -i any 
通过所有接口的网络数据包

上面显示的输出缺少每个数据包的详细信息。 要详细了解每个数据包,我们可以使用 '-v'选项。

'tcpdump' 是一个永无止境的命令。 我们可能会遇到需要强制停止输出的时候,可以通过按 'CTRL + C'.

停止打印数据包后,我们提供了一些与当前数据相关的统计信息 tcpdump 会议。 它看起来像这样:

Tcpdump 最终统计‘tcpdump’ 会话统计

提供的信息是:

  • 数据包数量 捕获和处理 在当前 tcpdump 会议。
  • 数据包数量 已收到 通过过滤器,但未被捕获。 这主要取决于操作系统的配置。
  • 数据包数量 掉线 由内核。 这通常发生在缓冲区中保存了太多数据包时。 这会导致缓冲区溢出,从而导致数据包丢失。

3.捕获特定数量的数据包

tcpdump 提供在结束数据包捕获会话之前仅捕获特定数量的数据包的规定。 它可以使用 '-c' 选项。

tcpdump -c 5 -i any 
限制 5 Tcpdump捕获会话限制为 5 个数据包

4. 使用 tcpdump 捕获协议特定的数据包

为了捕获属于特定网络协议的数据包,我们在末尾附加协议名称。

tcpdump -c 5 -i any tcp 
Tcp 过滤器 Tcpdump仅捕获 TCP 数据包

该命令显示的输出可能不是每个 Linux 用户都能理解的。 让我们尝试对以下数据包进行说明。

20:13:58.208219 IP6 linuxfordevices.32906 > del03s14-in-x0e.1e100.net.https: Flags [.], seq 2348951132:2348952480, ack 3385291322, win 1564, options [nop,nop,TS val 1855483575 ecr 3512250283], length 1348 
  • 20:13:58.208219 – 这 时间戳 存储在分组数据报中。
  • IP6 – 这 IP版本 正在使用。 在这里,它是 IPv6。
  • linuxfordevices.32906 – 这 源地址名称 数据包后跟端口号。 (我们的系统)
  • del03s14-in-x0e.1e100.net.https – 这 目的地地址名称 的数据包。
  • 旗帜 [.] – 该标志定义了 数据包类型. 在示例中 [.] 指一个确认包。
  • seq 2348951132:2348952480 – 序列号决定 数据包字节索引. 上面的数据包开始于 2348951132 并结束于 2348952480.
  • 确认 3385291322 – 这 确认号. 它用于管理在单个连接中交换的多个数据包。
  • 赢1564 – 这 窗口大小 告诉接收缓冲区中的可用字节。
  • 选项 [nop,nop,TS val 1855483575 ecr 3512250283] —— 协议相关 选项
  • 长度 1348 – 这 长度 数据包在 字节.

5. 捕获特定于主机的数据包

使用 'host' 关键字与 'tcpdump',我们可以过滤与特定主机系统交换的所有数据包。

tcpdump -nn -c 5 -i any host 45.79.77.230 
Tcpdump 主机过滤器特定于主机的查询

指某东西的用途 '-nn', 将主机名转换为其数字 Internet 地址。 命令中传递的 Internet 地址为 www.linuxfordevices.com。

注意:仅当存在具有特定 IP 地址的实际网络连接时,数据包才会出现。

如果我们只想捕获来自特定主机的那些包,那么我们使用 'src' (来源)后跟地址。

tcpdump -nn -c 5 -i any src 45.79.77.230 

对于特定于目的地的查询, 'dst' 用来。

tcpdump -nn -c 5 -i any dst 45.79.77.230 

6. 使用 tcpdump 命令捕获特定端口上的数据包

每个网络连接都通过计算机系统的特定端口进行维护。 在接收网络数据包时,端口号指定应该由哪个计算机应用程序获取它。

为了抓包,通过某个端口号过滤,我们使用 'port' 关键词。

tcpdump -i any port 8000 
Tcpdump 端口 80008000端口的网络数据包

如果我们不确定确切的端口号,我们总是可以通过以下方式使用一系列端口号:

tcpdump -i any portrange 8000-9000 

7.使用tcpdump命令读写数据包到文件

比方说,我们希望捕获当前的网络流量,但稍后再对其进行分析。 如果我们将数据包保存到文件中,则可以完成此任务。 这可以通过使用来完成 '-w' 代表“写”的选项:

tcpdump -c 5 -w network_file.pcap -i any 
转储 Save 文件将数据包写入文件

抓包文件的扩展名是 .pcap. 以后可以使用 '-r' 代表“阅读”的选项。

tcpdump -r network_file.pcap 
Tcpdump 读取文件从文件中读取数据包

8. 检查与网站的连接

如果我们需要检查我们是否连接到一个域名,那么我们可以使用以下命令:

tcpdump -XX -i any | grep journaldev.com 
Tcpdump 检查网站检查与 journaldev.com 的连接

'-XX' 选项将数据包中的值转换为 ASCII 和十六进制值。 由于域名差异,这可能不适用于每个 URL。

管道 ('|') 后面的符号 tcpdump 命令用于将输出数据包传递到 grep 命令。 'grep' 是Linux中的一个搜索工具,这里用来搜索数据包中的’journaldev.com’。 有关 grep 的更多信息。

结论

正如我们所看到的, tcpdump 当我们打算调试网络相关问题时,命令会派上用场。 要了解有关该命令的更多信息,我们可以通过运行来访问手册页 'man tcpdump' 在终端。 我们希望这篇文章符合读者的标准。 如有任何疑问或批评,请随时在下面发表评论。