使用C ++ for Windows编程数据包阻止程序(基本防火墙)

时间:2015-01-25 15:29:06

标签: c++ windows networking firewall

我对编写基本防火墙感兴趣,该防火墙根据用户定义的规则阻止数据包。

基本上,我已经编写了处理规则的部分,一切都没问题,但现在我应该实施防火墙本身(我猜这很难)。

我搜索了很多,发现了一些充满细节的链接,例如thisthis。第二个(Windows过滤平台)似乎最相关,现在,似乎没有关于ACTUALLY入门的任何数据,网站中的代码片段(好吧,在这个特定的主题)不能很好地解释这个主题

我想知道如何阻止匹配某个规则的数据包,因此包括几个阶段:

  1. 侦听任何传入数据包,所有端口,IP和协议。

  2. 检查数据包是否符合某些规则。

  3. 如果 匹配,请将其通过。如果,请抓住并阻止它。

  4. 现在,第2阶段实际上已经编程,我只需要根据阶段1匹配它(用什么类/结构来表示数据包)。我不确定做第1阶段和第3阶段。

    首先,我如何监听计算机中的所有连接?

    其次,我如何管理我捕获的数据包,让它通过OR阻止它。

    非常感谢帮助。我的意思是原始的WinAPI,但如果有一个适用于Windows的特定API(8,具体而言),我很乐意测试它。

1 个答案:

答案 0 :(得分:1)

嗯,你是对的 - 你已经离开了困难的部分: - )

您需要编写网络驱动程序以将自身定位在网络堆栈中,以拦截来自网卡的数据包,然后对其进行过滤。有一些方法可以解决这个问题(例如使用packet injection functions),但是它们几乎和编写自己的驱动程序一样困难。

你可以看一下开源驱动程序 - winpcap是大多数人都熟悉的,因为它是Wireshark使用的数据包捕获驱动程序。