如何在Windows中监控端口以获取流量?

时间:2010-09-05 21:51:23

标签: windows performance monitoring traffic

我正在尝试找到一种通过特定端口监控流量(进出)的解决方案。不需要捕获数据包,也不需要执行任何其他操作。它的作用是成为一个流量监听器,以确保每10分钟发送一次或从该端口接收的消息。它必须始终在后台运行(如守护进程),并且不会对性能产生重大影响。根据我的研究,一种选择是使用现有工具来做到这一点。有很多工具可以监控或嗅探流量,例如wireshark。好吧,似乎他们中的大多数都监视通过接口而不是端口的流量,或者它们不能作为守护进程运行。编写程序的另一种选择。 SharpPcap似乎是一个不错的选择,但我仍然需要捕获和分析数据包以了解是否存在此类流量。有人可以建议我该做什么吗?

2 个答案:

答案 0 :(得分:2)

SharpPcap以与Wireshark相同的方式处理数据包捕获,因此您可以设置过滤器,以便像在wireshark中一样将SharpPcap中捕获的数据包限制为特定端口。除此之外,与Wirehark相比,SharpPcap的重量要轻得多。

下载SharpPcap source tree并查看Example05.SetFilter。

要缩小结果范围,以便只捕获要查看的数据包,您需要使用一些过滤器。

Pcap在使用它的所有应用程序中使用通用语言指定要设置的过滤器。捕获使用winpcap(windows)或libpcap(* nix)的程序包括,sharppcap,wireshark,pcap.net,winpcap,libpcap,tcpdump等...有关如何使用pcap过滤器的优秀资源,请参阅this link

以下是您需要的过滤器:

  • ether host ehost
  • port port

其中ehost是发送/接收数据包的计算机的MAC地址,端口是您要监视的端口。所以完整的过滤字符串就是。

SetFilter("ether host ff:ff:ff:ff:ff:ff and port 60");

此处的MAC和端口仅用于说明目的,您显然会使用与特定设置相关的值更改它们。

在SetFilter示例中使用的这将简单地打印出一行信息,其中包含每次捕获数据包时数据包被捕获到命令行的时间,并且如果您的过滤器符合条件。

如果您想了解有关数据包的更多详细信息,例如来自标头或数据包有效负载的信息,则需要解析传入的原始数据包。如果您需要有关如何执行此操作的一些提示,请务必在sourceforge项目的论坛上寻求帮助。项目开发人员非常积极并且愿意提供帮助。

答案 1 :(得分:0)

限制工具对性能的影响的最佳方法是通过ETW(Windows事件跟踪)实时消费者(即激活ETW跟踪并立即读取它而不是将其保存到文件)。 This MSDN sample是了解如何通过C#执行此操作的好方法,它为您提供了一些入门代码。