将PIDcaching到端口映射Windows的安全方法

将PIDcaching到端口映射Windows的安全方法,第1张

概述将PIDcaching到端口映射Windows的安全方法

我使用Windivert通过windows上的透明代理pipe道连接(TCP和UDP)。 这是如何工作的,通过使用像GETTcptable2这样的函数进行端口到pID的查找,然后检查是否匹配代理或其任何subprocess的PID是否匹配。 如果他们不匹配,他们通过代理转发,如果他们这样做,数据包是不变的。

我的问题是,有没有一个安全的方法,或者一个安全的持续时间,我可以“caching”端口到PID查找的结果? 每当我收到大量的数据包,比如在YouTube上观看vIDeo时,使用Windivert的代码突然将所有的cpu都打开了,我假设这是通过对每个接收到的数据包进行Tcptable2查找。 我可以看到UDP没有真正的安全期限,我可以认为它是一个端口相同的进程,但是这可能与TCP?

如何将命名pipe道stream转换为套接字stream? (在windows上的C ++)

在C中closuresTCP侦听套接字

在连接失败时重新使用套接字描述符

发送(2)接收SIGPIPE的目的是什么?

linux和I / O完成端口?

作为Luis评论的一个补充,我认为缓存端口到pID lookup的应用程序也可以保留进程的句柄(通过OpenProcess获取)。 这个问题,如果关联到一个进程的资源没有被释放,直到所有的句柄关闭。 这是正常的,因为直到你有一个有效的句柄处理,你可以查询系统的各种信息,如使用的内存或时间。 所以你应该定期查看缓存的进程是否终止,以清除缓存中的条目并关闭句柄。

作为替代方案,您可以保留另一个信息,如可通过GetProcesstimes访问的进程的开始时间。 在缓存中查找进程ID时,可以打开进程并控制其启动时间。 如果可以的话,这是正确的过程,如果不是的话,进程ID已被重用,你应该从缓存清除条目。

第一种方法应该更高效,因为您不必为每个数据包重新打开进程,但是您必须更严格地识别终止的进程以释放资源,也许使用在所有进程句柄上使用WaitForMultipleObjectsEx的线程来一旦终止,就会收到提醒。

第二种方法应该更容易实施。

所以,我最终在这里做的是使用两个std :: unordered_maps。 一个映射是存储端口号(作为关键字)和最后系统时间(以毫秒为单位),TCPtable被查询以查找绑定到端口(关键字)的进程ID。 如果密钥不存在或者上一次大于当前系统时间加上2秒,则重新检查到TCPtable是否需要重新检查绑定到端口的PID。 完成检查后,我们更新第二个使用端口#作为键的映射,并返回一个int,它表示使用最后一个查询中有问题的端口找到的PID。 在查找中给我们提供了2秒钟的缓存,这将cpu使用率峰值从50%以上降至3%以下。

总结

以上是内存溢出为你收集整理的将PIDcaching到端口映射Windows的安全方法全部内容,希望文章能够帮你解决将PIDcaching到端口映射Windows的安全方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1272173.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存