网络层的Windivert ProcessId

问题描述 投票:0回答:1

我正在使用Windivert 2.0。

[我想知道是否可以在SOCKET层使用开放的Windivert句柄将ProcessID映射到5元组(协议,源ip,源端口,dest ip,dest端口),并将此映射与NETWORK的另一个开放的Windivert句柄一起使用层以过滤/阻止/拒绝数据包。

有可能吗?我可以想到2个潜在问题:

  1. 我必须在同一用户应用程序中打开2个不同层的Windivert句柄。

  2. 对于一个指定的套接字,哪个层将首先接收事件?原因我需要先构建地图并在NETWORK层中使用它。

非常感谢。

sockets networking port pid
1个回答
0
投票

您的基本方法是正确的。要基于进程ID在NETWORK层进行过滤,必须打开两个WinDivert句柄:

  1. SOCKET层上的一个句柄,用于建立从网络5元组到ProcessID的映射。
  2. NETWORK层的另一个句柄进行实际过滤。为此,使用ProcessID层映射将数据包的网络5元组映射到SOCKET,然后可以对数据包进行相应的过滤。

所以,是的,您确实需要处理。

您提到的另一个问题是,对于新连接,不能保证SOCKET层事件将首先到达。这也是事实。要变通解决此问题,用户应用程序应将NETWORK层事件排队,直到相应的SOCKET层事件到达为止,并且仅在两个事件都到达时才处理数据包。这有点复杂,但是可以解决问题。这也是Tallow使用的方法。

© www.soinside.com 2019 - 2024. All rights reserved.