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