我在Windows上使用Windows过滤平台标注来跟踪TCP连接。已建立的ALE和端点闭合层上的过滤器非常适用于检测连接的开始和结束。但是,我还需要知道每个方向的流量大小,最好是数据包计数,但我无法在关闭信息中找到它。
可以使用流层监视每个数据包,但在内核空间中维护会话表并不断更新每个数据包的会话并不吸引人,因为这会增加很多开销和复杂性。
任何人都知道如何在Windows上使用WFP有效地获取TCP会话的字节数?也欢迎其他建议。
答案 0 :(得分:0)
我也尝试过一次解决这个问题,但结果如下。它仅对IPv4有效!
在FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4图层上,您可以使用FwpsFlowAssociateContext0函数创建自己的上下文,稍后在DITNO_FIREWALL_STREAM_CALLOUT_V4和DITNO_FIREWALL_DATAGRAM_DATA_CALLOUT_V4图层中,增加字节计数器并保存上下文结构中的任何元数据。
一旦调用了flowDeleteFn,就意味着流量已经结束,你已经准备好了你的计数器。必须释放用于上下文的内存。
顺便提一下内核功能的运气好吗?