如何监视Windows中的stream量端口?

我试图find一个解决scheme,通过一个特定的端口监视stream量(进出)。 不需要捕获数据包,或者做其他任何事情。 它所做的就是成为一个stream量监听器,以确保每隔10分钟就有一个消息被发送到或从这个端口接收。 它必须始终在后台运行(如守护进程),并且没有显着的性能影响。 基于我的研究,一个select是使用现有的工具来做到这一点。 有一些工具可以监视或嗅探stream量,如wireshark。 那么,似乎大多数人监视通过一个接口,而不是一个端口的stream量,或者他们不能作为守护进程运行。 另一个select编写一个程序来做到这一点。 SharpPcap似乎是一个不错的select,但我仍然需要捕获和分析这些数据包,以了解这些数据是否存在。 有人可以build议我应该做什么吗?

Solutions Collecting From Web of "如何监视Windows中的stream量端口?"

SharpPcap以与Wireshark相同的方式处理数据包捕获,因此您可以设置过滤器,以便像在wireshark中一样,将捕获的数据包以与SharpPcap相同的方式限制在特定端口。 除了SharpPcap相对于wireshark来说,它将是一个更轻的选项。

下载SharpPcap 源代码树并查看Example05.SetFilter。

为了缩小结果,只捕获你想看到的数据包,你需要使用几个过滤器。

Pcap在所有使用它的应用程序中使用一种通用语言来指定要设置的过滤器。 捕获使用winpcap(windows)或libpcap(* nix)的程序包括,sharppcap,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#执行此操作的好方法,它为您提供了一些开始的代码。