2010-02-21 91 views
2

什么将是我写来阻止Windows计算机上的所有Internet访问的应用程序的最简单方法所有Windows上网?阻止从一个Win32应用程序

更多细节:

Windows系统:XP或更高

应用:一个基本的Win32应用程序用C/C++。

封闭:它必须能够阻止和随意解除,最好的方式,用户无法轻易逆转。 (通过右键点击系统托盘中的网络连接图标。)另外,理想情况下,我希望它使用的方法可以在用户重新启动Windows或重置机器时恢复访问权限,尽管我会如果机器在处于阻塞状态时被重置,也愿意让应用在Windows上自动启动并在启动时取消阻止访问。

上网:首先,我想从打传统的HTTP/HTTPS的网站阻止常规浏览器。其次,阻止IM客户端和客户端社交网络应用程序会很好。这也将是很好的,但不是必需的,仍然允许本地网络共享文件等。(请注意,只有第一个要求是绝对的。)

最后说明:这不是要成为安全工具,也不是它与用户的关系是否是敌对的(例如,使用家长控制工具),因此使用无法由确定用户解决的方案并不重要。 (考虑,我打算重启或复位以清除阻塞。这意味着,任何解决办法,用户可能会发现,将采取更多的努力比这是好的。)

谢谢!

p.s.我怀疑Windows防火墙API不适用于我,因为这需要适用于尚未启用防火墙或没有管理员权限的用户,但如果我在此问题上得到更正,我会很高兴。

+0

请注意,您本质上正在利用操作系统的弱点。因此,您可能必须处理每个Windows版本的每个SP。正如你正确地指出的那样,“修复网络”功能是存在的,你根本无法期望胜过这一点。 – MSalters 2010-02-22 09:59:51

+0

噢,请安装这个程序很明显。即请创建一个模态消息框,指出“ACME网络拦截器已阻止与'updates.microsoft.com'的连接”。这个程序无论如何都会造成很多混乱,最好不要隐藏它。无论如何,我都会知道我会将我的软件标记为与此类应用程序不兼容。 – MSalters 2010-02-22 10:04:08

回答

2

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

2

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

这就是说,这不是微不足道的要做,但样品应该让你大部分的方式。

1

不能有效地或实际上只有一个用户模式应用程序编写工具。

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

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

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

这里有一些链接

注意,你可能需要至少两种成分

  1. 您的驾驶
  2. 图形应用程序,一个人可以用它来控制你的工具

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

的几个注意事项:

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