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

时间:2009-01-08 05:25:23

标签: c++ winapi windows-vista windows-xp tcp

我希望有一个正在运行的应用程序或服务,在某些时间表上,可以禁用除特定应用程序之外的所有应用程序的Internet访问。

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

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

它必须在Vista和XP上运行,但我希望这些方法在每个平台上都会有所不同。

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

更新:

至少在 Vista 上,看起来我想在ALE layers of the WFP中使用过滤器。

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

更新2:

目前正在查看用于Vista之前系统的PfCreateInterface和相关的Pf * API。

6 个答案:

答案 0 :(得分:3)

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

另见question

答案 1 :(得分:1)

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

答案 2 :(得分:1)

通过使用防火墙限制其对互联网的访问。转到防火墙设置高级选项卡(获胜7) 并且那样做

答案 3 :(得分:0)

我不确定,但我认为您需要通过让程序以具有有限权限的用户身份运行来实现,问题是,您是否可以创建一个停止此类操作的用户帐户?

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

你可以放弃(即重命名)系统的winsock DLL并用你自己的DLL替换它吗? 您应该提供相同的API,但检查传入请求的进程名称...将错误代码返回给被阻止的应用程序,并将允许的应用程序的调用转发到真正的DLL上。