2301_76247106 2023-05-17 00:45 采纳率: 8%
浏览 60
已结题

wfp驱动流量监控之尝试

最近在看wfp驱动,使用wfp驱动实现进程流量监控,原先是参考微软例子,在establish层通过fwpsassociatecontext绑定在传输层。但是当应用先启动,后启动驱动,此时流量监控很不准。于是看了看ale层的一些介绍,选用ale-auth-connect进行fwpsassociate绑定在传输层,此时发现调用fwpsassociate函数的返回值既有0(成功)又有000004(已绑定)如果检测到已绑定的话,是不是要调用fwpsfloeremovecontext的函数进行删除以前绑定的上下文。但是使用establish层 回调函数的flowdeletion函数会自动进行回收删除。但是使用ale-auth-connect就会有些问题,在关联上下文时,返回值有较多的已关联(status_object_name_exists)这种该如何处理呢?
或者说如果使用establish层进行关联上下文能保证应用先启动,驱动后启动也能监控到流量信息呢?

  • 写回答

5条回答 默认 最新

  • 阿尔法斗士 2023-05-17 06:40
    关注
    获得2.25元问题酬金

    使用ALE层的FWPS_LAYER_ALE_AUTH_CONNECT_V4或FWPS_LAYER_ALE_AUTH_CONNECT_V6层来进行流量监控。由于这两个层是在连接建立的时候就开始处理的,所以能够更准确地监控流量。

    在已经绑定上下文的情况下,可以根据需要选择使用FwpsFlowRemoveContext()函数手动删除以前绑定的上下文或保持之前的绑定不变。如果选择手动删除可通过检查函数返回值确定是否成功,若成功则可能需要进行相应的清理操作。

    当使用FWP_CALLOUT_FLAG_ALE_AUTH_CONNECT时,在关联上下文时返回"status_object_name_exists"的错误是正常的现象。 这是因为这个标志表示已与身份验证连接相关联。 只有一个流对象可以与身份验证连接相关联,所以当尝试将另一个流对象添加到身份验证连接上下文时会发生此错误。 可以在处理此错误时忽略它。如果您要使用FWP_CALLOUT_FLAG_ESTABLISHED_CONNECTION标志,可以保证应用程序启动后再启动驱动时能正确监视流量信息。

    评论

报告相同问题?

问题事件

  • 系统已结题 5月25日
  • 创建了问题 5月17日