我正在尝试找到一种解决方案来监控通过特定端口的流量(进出)。不需要捕获数据包或执行任何其他操作。它的作用是成为一个流量监听器,以确保每 10 分钟有消息发送到该端口或从该端口接收。它必须一直在后台运行(就像一个守护进程),并且没有显着的性能影响。根据我的研究,一种选择是使用现有工具来做到这一点。有很多工具可以监控或嗅探流量,例如wireshark。好吧,似乎他们中的大多数都监视通过接口而不是端口的流量,或者它们不能作为守护程序运行。另一种选择是编写一个程序来做到这一点。SharpPcap似乎是一个不错的选择,但我仍然需要捕获并分析数据包以了解是否存在此类流量。有人可以建议我应该做什么吗?
2 回答
SharpPcap 以与 Wireshark 相同的方式处理数据包捕获,因此您可以设置过滤器以在 SharpPcap 中以与在 Wireshark 中相同的方式将捕获的数据包限制到特定端口。除了, SharpPcap 将是一个比wireshark 更轻的选择。
下载 SharpPcap源代码树并查看 Example05.SetFilter。
要缩小结果范围以便仅捕获想要查看的数据包,您需要使用一些过滤器。
Pcap 在所有使用它的应用程序中使用一种通用语言,并指定要设置的过滤器。捕获使用 winpcap (windows) 或 libpcap (*nix) 的程序包括、sharpcap、wireshark、pcap.net、winpcap、libpcap、tcpdump 等...有关如何使用 pcap 过滤器的重要资源,请参阅此链接。
以下是您需要的过滤器:
- 以太主机ehost
- 港口港口
其中 ehost 是发送/接收数据包的计算机的 MAC 地址,端口是您要监控的端口。所以完整的过滤器字符串将是。
SetFilter("ether host ff:ff:ff:ff:ff:ff and port 60");
此处的 MAC 和端口仅用于说明目的,您显然可以使用与您的特定设置相关的值来更改它们。
这在 SetFilter 示例中使用,将在每次捕获数据包时简单地打印一行信息,其中包含捕获数据包的时间到命令行,并且如果您的过滤器满足条件。
如果您想要有关数据包的更多详细信息,例如来自标头或数据包有效负载的信息,您需要解析传入的原始数据包。如果您需要有关如何执行此操作的提示,请务必在 sourceforge 项目的论坛上寻求帮助。项目开发人员非常积极,总是愿意提供帮助。
限制您的工具对性能的影响的最佳方法是通过 ETW(Windows 事件跟踪)实时使用者(即激活 ETW 跟踪并立即读取它而不是将其保存到文件的工具)。这个 MSDN 示例是了解如何通过 C# 执行此操作的好方法,它为您提供了一些入门代码。