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

时间:2010-02-21 08:55:37

标签: c++ windows networking winapi

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

更多详情:

Windows:XP或更高版本

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

阻止:它需要能够随意阻止和解除阻塞,理想情况是用户无法轻易反转。 (比方说,右键单击系统托盘中的网络连接图标。)另外,理想情况下,如果用户重新启动Windows或重置机器,我想要使用它来恢复访问的方法,尽管我是如果机器在处于阻塞状态时被重置,也愿意让Windows自动启动,并在启动时取消阻止访问。

互联网访问:首先,我想阻止传统浏览器访问传统的http / https网站。其次,阻止IM客户端和客户端社交网络应用程序会很不错。仍然允许本地网络进行文件共享等等(但不是必需的)(注意,只有第一个要求是绝对的。)

最后的注意事项:这并不是一个安全实用程序,它与用户的关系也不会是对抗性的(例如,使用父母控制实用程序),因此使用可能的方案并不重要。由一个坚定的用户来解决。 (考虑到我打算重新启动或重置以清除阻止。这意味着用户可能会发现需要花费更多精力的任何变通方法都可以。)

谢谢!

P.S。我怀疑Windows防火墙API对我不起作用,因为这需要对没有启用防火墙或没有管理员权限的用户有效,但如果我对此纠正,我会很激动。< / p>

4 个答案:

答案 0 :(得分:2)

听起来您打算运行不想要访问互联网的应用程序。也许您可以在虚拟机内部运行它们,例如VirtualBox,并禁用网络。

答案 1 :(得分:2)

你可以用Winsock SPI来做。 Windows SDK有一个示例(在Samples \ netds \ winsock \ lsp下),它实现了所谓的分层服务提供程序,它允许您挂钩Winsock提供的所有用户模式函数并拒绝/修改阻塞网络的调用访问或重定向到不同位置的流量。所有安装的winsock应用程序都会受到影响,因此在您的代码中,您可能会对应用程序可以发出的内容等进行监控,并且可以动态禁用/启用。现在一个坚定的人可以找到解决方法,但这将是一个痛苦。

那说这不是琐碎的,但是样本应该可以帮助你完成大部分工作。

答案 2 :(得分:1)

仅使用用户模式应用程序无法有效或实际地编写工具。

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

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

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

这里有一些链接

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

  1. 您的司机
  2. 一个人可以用来控制工具的图形应用程序
  3. 如果您想进行任何监控,您可能需要一个用户模式服务来收集驱动程序中的数据。这比在驱动程序中尝试执行此操作更好。通常,您应该在驱动程序中执行最少量的工作。

    一些注意事项:

    1. 编写此类软件时,您需要非常注意安全性。这非常重要。面向网络的软件具有最高的安全要求。
    2. 认识到表现。
    3. 您的驱动程序和/或服务必须了解调用应用程序的上下文。这也是一个安全边界。例如,未以管理员身份运行的应用程序应该无法控制您的驱动程序。

答案 3 :(得分:-1)

查看防火墙源代码