阻止从Win32应用程序的所有Windows Internet访问

我正在写一个应用程序阻止Windows机器上的所有Internet访问,最简单的方法是什么?

更多细节:

Windows:XP或更高版本

应用程序:用C / C ++编写的基本Win32应用程序。

阻挡:需要能够随意阻挡和解锁,理想情况下用户不能轻易倒转。 (通过右键单击系统托盘中的networking连接图标)。另外,理想情况下,我希望它允许访问的方法,如果用户重新启动Windows或重置机器,我想如果机器在阻塞状态下被重置,也愿意在Windows上启动应用程序自动启动并在启动时取消阻止访问。

互联网访问:主要是阻止常规浏览器访问传统的http / https网站。 其次,阻止IM客户端和客户端社交networking应用程序将是很好的。 这也将是很好的,但不是必须的,仍然允许本地networking文件共享等(注意,只有第一个要求是绝对的)。

最后的注意事项:这不是一个安全工具,它与用户的关系也不是敌对的(例如,使用家长控制工具),因此使用无法工作的scheme并不重要在一个确定的用户周围。 (考虑到我打算重新启动或重置清除阻塞,这意味着任何解决方法,用户可能会发现这将需要更多的努力,比这是好的。

谢谢!

ps我怀疑,Windows防火墙API不会为我工作,因为这需要为尚未启用防火墙或没有pipe理员权限的用户工作,但如果我纠正这一点,我会很高兴。

这听起来像你打算运行你不想访问互联网的应用程序。 也许你可以在禁用网络的VirtualBox等虚拟机中运行它们。

你可以用Winsock SPI做 。 Windows SDK有一个示例(在Samples \ netds \ winsock \ lsp下),它实现了所谓的分层服务提供程序,它允许您挂接Winsock提供的所有用户模式功能,并拒绝/修改呼叫以阻止网络访问或重定向交通到不同的地点。 所有安装的winsock应用程序都将受到影响,所以在你的代码中,你可能会针对什么应用程序可以出去等等而禁用/启用。 现在一个有决心的人可以找到解决办法,但这将是一个痛苦。

这就是说这不是微不足道的 ,但样本应该让你在那里的大部分。

只有用户模式的应用程序才能有效或实际地编写工具。

你需要写的是一个网络I / O堆栈过滤器驱动程序。 这通过编写一个Windows驱动程序完成。 这与Windows的Win32应用程序不同。 驱动程序以内核模式运行,应用程序以用户模式运行。

在Windows Vista和更高版本上,内核模式网络编程接口(NPI)就是为此而设计的。 这是Windows防火墙使用的相同的API。 这些有时称为Winsock内核(WSK)API。

实际上,你正在编写一个网络防火墙(或多或少)

这里有一些链接

  • Winsock内核简介(WSK)

  • Windows核心网络博客

  • MSDN上的网络编程接口文档

请注意,您的可能需要至少两个组件

  1. 你的司机
  2. 一个人可以用来控制你的工具的图形应用程序

如果您想进行任何监控,您可能需要一个从您的驱动程序收集数据的用户模式服务。 这比在驱动程序中试图做得更好。 一般来说,你应该在司机中做最少量的工作。

一些注意事项:

  1. 编写这种软件时,你需要非常清楚安全性。 这是非常微不足道的。 面向网络的软件具有最高的安全性要求。
  2. 认识到表现。
  3. 您的驱动程序和/或服务必须知道调用应用程序的上下文。 这也是一个安全边界。 例如,没有以管理员身份运行的应用程序不应该能够控制您的驱动程序。

看看防火墙的源代码