2011-10-09 112 views
14

我需要为我编写的应用程序打开出站连接的Windows防火墙。如何添加出站Windows防火墙例外?

我已经能够找到的最好的答案在这里:

http://www.shafqatahmed.com/2008/01/controlling-win.html

http://www.vincenzo.net/isxkb/index.php?title=Adding_a_rule_to_the_Windows_firewall

的问题是该方法仅创建一个入境规则,而不是出境规则。 (C#和InnoSetup脚本都使用相同的方法。)这对我来说完全没用。

Windows防火墙的默认行为是允许出站流量,但不能保证有人不会改变这种情况。

我宁愿在安装程序(使用InnoSetup)中执行此操作,而不是在C#中执行此操作。

我错过了什么吗?

有谁知道如何创建出站规则?

回答

0

这是可以传递给Windows命令行工具的许多任务之一。 netsh做适当的事情,但它(像netsh所做的一切)几乎不可能找到。简单的版本是:
netsh firewall add allowedprogram <path> <name>
有关详细信息,请运行:无论是在[Run]部分或致电Exec
netsh firewall add allowedprogram ?

能做到这些。

请注意,这是在Windows 7中折旧;如果您只针对Vista/2008或更高版本,则应该使用netsh advfirewall firewall。微软有an article从前者转换为后者,但我仍然需要支持XP,所以我没有这样做。

22

如果您需要为您的应用程序添加一些例外,您可以使用netsh

写在命令行(为XP):

netsh firewall add allowedprogram ? 

写在命令行(为W7):

netsh advfirewall firewall add rule ? 

这becouse netsh防火墙命令差已被弃用。相反,我们必须使用命令netsh advfirewall防火墙

有关使用命令netsh advfirewall防火墙,而不是使用netsh firewall命令的更多信息,我们可以在知识库那里看到:http://go.microsoft.com/fwlink/?linkid=121488

例子:

添加传入流量的规则,而不信使安全封装。 EXE:

netsh advfirewall firewall add rule name="allow messenger" dir=in program="c:\programfiles\messenger\msmsgs.exe" security=authnoencap action=allow 

在80端口添加传出通信的规则:

netsh advfirewall firewall add rule name="allow80" protocol=TCP dir=out localport=80 action=block 

通过80端口添加安全&交通加密,TCP规则入站流量:

netsh advfirewall firewall add rule name="Require Encryption for Inbound TCP/80" protocol=TCP dir=in localport=80 security=authdynenc action=allow 
1

的netsh的问题是,它不会对某些Windows版本的工作(例如Windows Vista Basic)。这就是为什么在不使用netsh的情况下添加例外情况。 This article contains sample Inno Setup code

+0

这在Windows版本中也不是很可靠;请参阅MSDN上的备注:*“Windows防火墙API可用于需求部分中指定的操作系统,在后续版本中可能会更改或不可用。对于Windows Vista及更高版本,使用具有高级安全性的Windows防火墙建议使用API​​“*,要求:支持的最低客户端:Windows Vista,带有SP2的Windows XP;支持的最低服务器:Windows Server 2003 SP1。所以,正如你所看到的,即使在Windows Vista上,这个API的一部分也是不推荐的。 MS有时很疯狂:-) – TLama