Sockets 网络层的Windivert进程ID
我正在使用Windivert 2.0 我想知道我是否可以在套接字层用一个开放的Windivert句柄构建一个ProcessID到5元组(protocal、source ip、source port、dest ip、dest port)的映射,并在网络层用另一个开放的Windivert句柄使用该映射来过滤/阻止/拒绝数据包 可能吗?我可以想到两个潜在的问题:Sockets 网络层的Windivert进程ID,sockets,networking,port,pid,Sockets,Networking,Port,Pid,我正在使用Windivert 2.0 我想知道我是否可以在套接字层用一个开放的Windivert句柄构建一个ProcessID到5元组(protocal、source ip、source port、dest ip、dest port)的映射,并在网络层用另一个开放的Windivert句柄使用该映射来过滤/阻止/拒绝数据包 可能吗?我可以想到两个潜在的问题: 我必须在同一个用户应用程序中打开两个不同层的Windivert句柄 对于一个指定的套接字,哪个层将首先接收事件?因为我需要先构建地图,然后在
非常感谢。您的基本方法是正确的。要根据进程ID在
网络
层进行过滤,需要打开两个WinDivert句柄:
SOCKET
层有一个句柄,用于构建从网络5元组到ProcessID
s的映射网络
层的另一个句柄执行实际过滤。为此,使用SOCKET
层映射将分组的网络5元组映射到ProcessID
,并且可以相应地过滤分组您提到的另一个问题是,对于新连接,不能保证
套接字
层事件会首先到达。这也是事实。要解决此问题,用户应用程序应将网络
-层事件排队,直到相应的套接字
-层事件到达,并且仅在两个事件到达后处理数据包。这有点复杂,但它解决了问题。这也是。欢迎使用StackOverflow。在这里提问之前,请先阅读指南。非常感谢。我来看看牛油是怎么做的。