我正在编写的应用程序阻止Windows计算机上所有Internet访问的最简单方法是什么?
更多详情:
Windows:XP或更高版本
应用程序:用C / C ++编写的基本Win32应用程序。
阻止:它需要能够随意阻止和解除阻塞,理想情况是用户无法轻易反转。 (比方说,右键单击系统托盘中的网络连接图标。)另外,理想情况下,如果用户重新启动Windows或重置机器,我想要使用它来恢复访问的方法,尽管我是如果机器在处于阻塞状态时被重置,也愿意让Windows自动启动,并在启动时取消阻止访问。
互联网访问:首先,我想阻止传统浏览器访问传统的http / https网站。其次,阻止IM客户端和客户端社交网络应用程序会很不错。仍然允许本地网络进行文件共享等等(但不是必需的)(注意,只有第一个要求是绝对的。)
最后的注意事项:这并不是一个安全实用程序,它与用户的关系也不会是对抗性的(例如,使用父母控制实用程序),因此使用可能的方案并不重要。由一个坚定的用户来解决。 (考虑到我打算重新启动或重置以清除阻止。这意味着用户可能会发现需要花费更多精力的任何变通方法都可以。)
谢谢!
P.S。我怀疑Windows防火墙API对我不起作用,因为这需要对没有启用防火墙或没有管理员权限的用户有效,但如果我对此纠正,我会很激动。< / p>
答案 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。
实际上,您正在编写网络防火墙(或多或少)
这里有一些链接
<强> Windows Core Networking Blog 强>
注意,您可能至少需要两个组件
如果您想进行任何监控,您可能需要一个用户模式服务来收集驱动程序中的数据。这比在驱动程序中尝试执行此操作更好。通常,您应该在驱动程序中执行最少量的工作。
一些注意事项:
答案 3 :(得分:-1)
查看防火墙源代码