C++ 如何阻止选定的应用程序访问internet(C+;+;,Win32)

C++ 如何阻止选定的应用程序访问internet(C+;+;,Win32),c++,winapi,windows-vista,windows-xp,tcp,C++,Winapi,Windows Vista,Windows Xp,Tcp,我希望有一个正在运行的应用程序或服务,在某些计划下,可以禁用除特定应用程序以外的所有应用程序对internet的访问 我正在尝试创建一个可以在编程控制下打开或关闭的过滤器。不仅仅是IP地址和端口,我还希望能够阻止特定的应用程序,就像区域警报和其他软件防火墙让你阻止一样 例如,iexplore.exe、skype.exe、firefox.exe、aim.exe。但仍需要允许其他应用程序根据需要进行连接 它必须在Vista和XP上工作,但我有点希望在这些平台上的方法会有所不同 基本上,过滤器必须将网

我希望有一个正在运行的应用程序或服务,在某些计划下,可以禁用除特定应用程序以外的所有应用程序对internet的访问

我正在尝试创建一个可以在编程控制下打开或关闭的过滤器。不仅仅是IP地址和端口,我还希望能够阻止特定的应用程序,就像区域警报和其他软件防火墙让你阻止一样

例如,iexplore.exe、skype.exe、firefox.exe、aim.exe。但仍需要允许其他应用程序根据需要进行连接

它必须在Vista和XP上工作,但我有点希望在这些平台上的方法会有所不同

基本上,过滤器必须将网络通信绑定回发出请求的可执行文件,然后允许或拒绝它

更新:

至少在Vista上,我想在中使用过滤器

在XP上,我仍然在寻找最好的方法。我真的需要编写设备驱动程序和处理内核吗?我只是一个低级的应用程序开发人员。现在杀了我

更新2:


目前正在研究用于Vista之前系统的PfCreateInterface和相关Pf*API

我不确定,但我认为您需要让程序以具有有限权限的用户的身份运行,问题是,您可以创建一个用户帐户来停止这些事情吗?

您必须编写一个设备驱动程序,根据请求流量的可执行文件过滤流量。

您需要重定向所有的数据(或至少多次)对任何运行程序的WinSock API函数调用您自己的替换函数。这意味着进入每个运行程序的内存并劫持这些函数,这是一个…有趣的…练习。:-)

这可能足以让您开始学习,或者至少可以提出一些更具体的问题。

您能否将系统的winsock DLL移到一边(即重命名),并用自己的替换它?
您应该提供相同的API,但请检查传入请求的进程名称。。。向被阻止的应用程序返回错误代码,并将允许的应用程序的调用转发到真实的DLL。

您可以使用Windows防火墙API的界面动态更改Vista和XP的防火墙策略


也看到这个

通过使用防火墙限制其对互联网的访问。转到防火墙设置高级选项卡(win 7)
要做到这一点,它必须在Windows的有限帐户和管理员帐户中运行。我并不是试图阻止所有应用程序执行。我只希望应用程序访问internet的尝试失败(即丢弃数据包或拒绝连接)。单个应用程序可以作为与当前登录用户不同的用户运行。。。。也就是说,如果你知道你正在谈论的程序,你可以将可执行文件放在普通用户无法访问的地方,然后只通过一个快捷方式提供对每个锁定应用程序的访问,该快捷方式以锁定用户的身份运行。我感谢你的建议。但是我不能移动应用程序来创建快捷方式,等等。我的应用程序将安装在它甚至不知道要访问互联网的应用程序的机器上。Firefox可能已经启动,现在可以访问了,但在晚上8点,它已经不能访问了。下一个http请求被阻止了。这主意不错,但自从Windows 2000以来,操作系统就有代码来阻止这种事情,所以恶意软件无法替换系统文件。它还可能导致升级问题。更不用说,如果这是一个好方法,那么如何阻止另一个应用程序安装他们的winsock版本,并从根本上禁用我的。