【问题标题】:Programming a Packet Blocker (basic firewall) in C++ for Windows在 C++ 中为 Windows 编写数据包阻止程序(基本防火墙)
【发布时间】:2015-01-25 15:29:05
【问题描述】:

我有兴趣编写一个根据用户定义的规则阻止数据包的基本防火墙。

基本上,我已经编写了处理规则的部分,一切正常,但现在我应该自己实现防火墙(我猜是最难的部分)。

我进行了很多搜索,发现了一些详细的链接,例如 thisthis。第二个(Windows 过滤平台)似乎最相关,现在,似乎没有任何关于实际开始的数据,站点中的代码 sn-ps(嗯,在这个特定主题中)并没有解释所有主题太好了。

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

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

  2. 检查数据包是否符合特定规则。

  3. 如果它匹配,让它通过。如果它没有,则将其捕获并在那里阻止它。

现在,stage 2其实已经编程好了,我只需要根据stage 1来匹配(用什么类/结构来表示数据包)。我不确定是否要进行第 1 阶段和第 3 阶段。

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

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

我们将不胜感激。我的意思是原始的 WinAPI,但如果有某个好的 API 可以在 Windows(特别是 8)上运行,我很乐意对其进行测试。

【问题讨论】:

  • 不清楚这个问题是否应该以“太宽泛”、“不清楚你在问什么”、“因为它不包含任何代码而离题”或“离题”而结束因为这是对场外资源或建议的请求”。
  • 将“windows 数据包过滤器”打入您最喜欢的搜索引擎。
  • libpcap 和 tcpdump?难道你不能用这样的方式实现你的数据包捕获和分析吗?

标签: c++ windows networking firewall


【解决方案1】:

嗯,你是对的 - 你把最难的部分留到了最后 :-)

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

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

【讨论】:

  • 感谢您的回答。我对(Winpcap的)描述不太了解,它有丢包的能力吗?
  • @Joseph 不,它只是一个数据包嗅探器,但它可能会给你一个开始。
  • 我确实编写了自己的数据包嗅探器,但这对我没有帮助,因为我无法根据我的数据包拦截器的规则丢弃数据包。我所需要的只是捕获数据包、查看其信息并能够丢弃或让它通过的能力。
猜你喜欢
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2011-10-20
相关资源
最近更新 更多