我正在使用Windivert 2.0。
[我想知道是否可以在SOCKET层使用开放的Windivert句柄将ProcessID映射到5元组(协议,源ip,源端口,dest ip,dest端口),并将此映射与NETWORK的另一个开放的Windivert句柄一起使用层以过滤/阻止/拒绝数据包。
有可能吗?我可以想到2个潜在问题:
我必须在同一用户应用程序中打开2个不同层的Windivert句柄。
对于一个指定的套接字,哪个层将首先接收事件?原因我需要先构建地图并在NETWORK层中使用它。
非常感谢。
您的基本方法是正确的。要基于进程ID在NETWORK
层进行过滤,必须打开两个WinDivert句柄:
SOCKET
层上的一个句柄,用于建立从网络5元组到ProcessID
的映射。NETWORK
层的另一个句柄进行实际过滤。为此,使用ProcessID
层映射将数据包的网络5元组映射到SOCKET
,然后可以对数据包进行相应的过滤。所以,是的,您确实需要处理。
您提到的另一个问题是,对于新连接,不能保证SOCKET
层事件将首先到达。这也是事实。要变通解决此问题,用户应用程序应将NETWORK
层事件排队,直到相应的SOCKET
层事件到达为止,并且仅在两个事件都到达时才处理数据包。这有点复杂,但是可以解决问题。这也是Tallow使用的方法。