2010-09-05 22 views
2

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

回答

0

限制工具对性能的影响的最佳方式是通过ETW(Windows事件跟踪)实时使用者(即,一种激活ETW跟踪并立即读取而不是将其保存到一份文件)。 This MSDN sample是一个很好的方式来看看如何通过C#做到这一点,它给你一些代码来开始。

2

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

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

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

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

以下是需要的过滤器:

  • 醚主机ehost
  • 端口端口

凡ehost是计算机的发送/接收的数据包的MAC地址并且该端口是您要监控的端口。所以完整的过滤器字符串会。

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

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

这在SetFilter示例中使用,只需打印出一行信息,其中包含每次捕获数据包时捕获到数据包的时间以及符合过滤条件的条件。

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