Linux下使用tcpdump命令分析网络Linux下使用tcpdump命令分析网络Linux下使用tcpdump命令分析网络Linux下使用tcpdump命令分析网络
  • 业务
  • 目标
  • 支持
  • 关于
  • 联系我们
  • 登录
✕

Linux下使用tcpdump命令分析网络

发表 admin at 2025年2月28日
类别
未分类
标签

tcpdump 命令是一个方便的网络分析实用程序。通过一些实际示例了解如何使用它。

Tcpdump 是分析网络和查找相关网络问题的绝佳工具。它会捕获经过的数据包,并向您显示网络上正在发生和传入的情况。命令的输出显示在 STDOUT 上,也可以存储在文件中。

感谢开发人员将 Tcpdump 作为开源项目。它可以在 Unix 和 Linux 系统上免费使用。 Windows 有一个“Microolap TCPDUMP for Windows”变体以及相关的价格标签。

tcpdump有一长串可供使用的选项。在本文中,我将重点介绍经常使用的核心选项。

1. 检查可用接口

要检查要捕获的所有可用接口,请使用“-D”标志:

sudo tcpdump -D

这将列出系统上的所有接口,包括无线和有线接口等。使用 --list-interfaces 标志也可以获得相同的功能:

sudo tcpdump --list-interfaces

2. 特定接口抓包

在不使用任何选项的情况下,Tcpdump 将扫描所有接口。 -i 标志捕获来自特定接口的流量:

tcpdump -i <target-interface>

将 target-interface 替换为您要扫描的接口的名称。例如,对于接口eth0,此命令将如下:

sudo tcpdump -i eth0

注意:从现在开始,我将使用 eth0 或 eth1 作为目标接口。因此,无论您在哪里看到 -i 标志,它都会伴随着接口 eth0 或 eth1。

3. 预设捕获次数

-c 标志可用于预设要捕获的数据包数量。

例如,我们将此值设置为 4 以捕获四个数据包。在这种情况下,命令将是:

sudo tcpdump -c 4 -i eth0 

如果您未指定计数,则将使用组合键ctrl+c 或ctrl+z 手动中断捕获操作。

在下面的文章中,我将根据需要添加 -c 标志以及其他标志。这将帮助我们清楚、轻松地理解命令的输出。

4. 获取详细输出

要获取 tcpdump 命令的详细输出,您可以使用 -v 标志:

sudo tcpdump -c 6 -v -i eth0 

您可以使用更多 -v 标志(如 -vv 或 -vvv)进一步提高详细级别。这将在终端上产生更详细的输出:

sudo tcpdump -vv -i eth0 

5. 以 ASCII 格式打印捕获的数据

有时我们可能需要 Tcpdump 输出为 HEX 或 ASCII 格式。我们可以使用 ASCII 格式的选项 -A 和 ASCII 和 HEX 格式的选项 -XX 来解决这个问题:

sudo tcpdump -XX -i eth0

6. 捕获特定源IP发送的数据包

如果您想检查来自特定源 IP 地址的流量,请使用以下命令:

sudo tcpdump -i eth0 src <source-ip-address>

我们以源IP为192.168.56.11来查看流量的详细信息:

sudo tcpdump -i eth1 -c 5 src 192.168.56.11

这里的计数 5 将仅捕获前五个数据包。

7. 捕获发送到特定目的IP的数据包

如果您想检查发送到特定目标 IP 地址的流量,请使用以下命令:

sudo tcpdump -i eth0 dst <source-ip-address>

我们将目标 IP 设为 192.168.56.11 并查看流量的详细信息:

sudo tcpdump -i eth1 -c 5 dst 192.168.56.11

8. 使用 Tcpdump 的过滤选项

这是缩小捕获数据以进行检查的好方法。这将消除不必要的流量并简化您的工作。您可以通过根据主机、端口、协议和其他条件过滤流量来实现此目的。

让我们看看其中的一些:

端口号

如果您想根据端口号(例如端口 22)过滤流量,则执行 tcpdump 命令:

sudo tcpdump -i eth0 port 22

此命令将捕获 TCP 和 UDP 流量。

协议

与 port 指令类似,proto 指令根据特定流量过滤数据包捕获。在这里,您可以使用协议名称或协议编号作为参数值:

sudo tcpdump -i eth0 proto tcp
sudo tcpdump -i eth0 proto 6

令您惊讶的是,上面的两个命令是等效的。这是因为 6 是 TCP 的协议号。

主机过滤器

host 参数只是使用其 IP 过滤来自特定主机的流量:

sudo tcpdump -i eth0 host 192.168.56.10

这将捕获来自该主机的所有流量。有趣的是,您可以对主机应用多个过滤器来针对特定类型的数据包流量。

例如:

sudo tcpdump -i eth1 -c 50 “(host 192.168.56.11) and (port 443 or port 80)"

在这里,我将不同的过滤规则合并为一个规则。您可以看到此规则正在过滤 http 和 https 流量。这是因为该规则包含端口 80 和 443(常见网络端口)的过滤器。

9. 保存捕获的数据

如果你想将捕获的数据存储在文件中,可以这样做。

sudo tcpdump -i eth0 -c 10 -w my_capture.pcap

保持数据包计数较小的值;否则,您可能需要手动停止该过程。

10. 读取捕获的数据

您可以使用 .pcap 文件中存储的数据通过 Wireshark 或任何其他图形网络协议分析器进行分析。

您可以使用 tcpdump 本身来读取它。

tcpdump -r my_capture.pcap

上面的屏幕截图显示了上述 my_capture.pcap 文件的数据。

结论

目前为止就这样了。我希望您很好地了解如何使用不同的方式来使用 tcpdump 命令。当您从远程无头机器捕获数据包时,这是最佳选择。

如果您想要一种更直观的方式来理解数据包捕获,请尝试 Wireshark。

©2015-2025 Norria support@norria.com