Linux下使用tcpdump命令分析网络
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。