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 – 这 目的地地址名称 的数据包。
  • 标志 [.] – 该标志定义了 数据包类型. 在里面 example [.] 指一个确认包。
  • 序列号 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
Tcpdump 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' 在终端。 我们希望这篇文章符合读者的标准。 如有任何疑问或批评,请随时在下面发表评论。