我正在写一个应用程序阻止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上的网络编程接口文档
请注意,您的可能需要至少两个组件
如果您想进行任何监控,您可能需要一个从您的驱动程序收集数据的用户模式服务。 这比在驱动程序中试图做得更好。 一般来说,你应该在司机中做最少量的工作。
一些注意事项:
看看防火墙的源代码