如何实时查看应用程序网络协议通信

如何实时查看应用程序网络协议通信

我想实时查看客户端-服务器应用程序使用的协议。我对任何统计数据都不感兴趣。我只想查看服务器和客户端发送的消息。如果有帮助的话,这是 FreeBSD 特有的。经过一番谷歌搜索,我发现 tcpdump 是正确的选择。所以我尝试在我的服务器上运行它,但无法缩小特定于我的应用程序的数据包内容。它是一堆实时滚动的文本。我的应用程序的实际通信并没有那么繁重,当它显示在终端上时不会丢失跟踪。

我想我可能没有提供足够的信息。如果需要的话请添加评论。我会很快回复。

非常感谢任何帮助或指点。

答案1

您可以轻松过滤 tcpdump 捕获的数据包。我假设您知道应用程序在哪个端口上进行通信?例如,假设您想要捕获端口 12345 上的所有流量。然后您可以运行:

$ tcpdump port 12345

或者,您可以捕获到文件,然后稍后使用 GUI 工具打开Wireshark

$ tcpdump -s0 -w packets.log port 12345

答案2

您需要进行一些过滤,以将 tcpdump 限制为您想要的数据。例如,只查找涉及主机 a 和主机 b 的流量

tcpdump $options host a and host b 

我通常在 tcpdump 中使用 -n、-X、-vv 和 -s0 选项。您还可以根据端口和许多其他内容进行过滤。要查看主机 a 和主机 b 之间的 smtp 对话,您可以像这样运行 tcpdump:

tcpdump -n -X -vv -s0  host a and host b and port smtp

这将限制显示的数据为涉及 ldap 端口、主机 a 和主机 b 的数据。如果缺少这 3 个中的任何一个,则不会显示。手册页将包含有关过滤的更多信息。

希望这对你有帮助,Rik

答案3

如果协议是基于文本的(例如 HTTP、SMTP 等),我喜欢ngrep。它使用libpcap类似的tcpdump东西,因此过滤语法是相同的。不同之处在于它的输出旨在显示数据包负载,并且它将允许您将输出限制为与正则表达式匹配的数据包。

例如,要查看邮件投递尝试,您可以执行以下操作:

ngrep -d eth0 -qlM -s 0 -W byline '^MAIL FROM:|^RCPT TO:' 'tcp port 25'

相关内容