在C#/C++中创建数据包筛选器

Creating a Packet Filter in C#/C++?

本文关键字:数据包 筛选 创建 C++      更新时间:2023-10-16

过去,我编写过C++插件,绕过Winsock中的recvfrom()函数,并丢弃/操纵来自主应用程序的传入流量。

我现在希望编写一个独立的应用程序,它可以监听所有接口,读取传入的UDP数据包,并在数据包结构与用于针对我们的已知漏洞相匹配时丢弃它们。

最好的方法是什么?这将在Windows Server 2008计算机上使用,这些计算机为NIC分配了大量静态IPv4地址。我曾考虑过可能绕过Winsock,但由于这不是一个功能丰富的应用程序,所以无论采用什么最简单的方法来实现这一点都非常好。

注意我开始使用Pcap.Net实现这一点,但意识到我不能用这种方式丢弃数据包,所以我真的不知道如何处理。

在C#中,这可能不是一项简单的任务,因为过滤网络可能会将您绑定到操作系统内核中的低级代码。

Windows Server 2008中还有一些API用于设置自定义数据包筛选器。

虽然在p/invoke中可能是可包装的,但我建议使用C++和本机代码。

您可能感兴趣的其他阅读内容在这里的代码项目中。

您想要使用EasyHook。如果你说它实际上只是一个你需要担心的主要应用程序,你可以创建一个简单的用户模式挂钩,挂钩send()和receive()。你可以看看oSpy是如何做到这一点的(尽管oSpy的项目相当大)。EasyHook使挂钩变得非常容易。