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