用C#以编程方式改变ipsec规则的方法?

我知道如何执行IPsec更改的唯一方法是调用netsh来执行更改。 是否有直接使用System.Management和WMI对象的方法? 如果是这样,它是什么? 我很难在MSDN上找到相关的WMI信息。

或者是否有其他人使用过的有用方法?

编辑:我在C#工作,并且更喜欢基于.NET System.Management的答案的C#示例。

谢谢!

1)确切:WMI。

EnableIPFilterSec WMI类静态方法可以在所有IP绑定网络适配器上全局启用IP安全性。 启用安全性后,可以使用EnableIPSec WMI类方法更改任何特定适配器的安全特性。 MSDN为前者:

http://msdn.microsoft.com/en-us/library/aa390381%28VS.85%29.aspx

有关EnableIPSec及其参数(允许您声明端口和协议列表)的信息,请参阅此MSDN条目:

http://msdn.microsoft.com/en-us/library/aa390382%28VS.85%29.aspx

最后,这是一个指向WMI.NET代码目录的链接,其中包含使用System.Management执行WQL查询的有用代码示例。

http://msdn.microsoft.com/en-us/library/ms257338.aspx

注意:

如果你需要广泛地使用你的ObjectQuery / SelectQuery System.Management对象的WQL测试,就像我一样,试试wbemtest。 它是Windows Management Instrumentation测试人员,可以为您的应用程序编写,测试和修改WQL。

2)相关:使用FirewallAPI,INetFwRule接口以及可能需要的任何其他内容在Vista或更高版本上进行编程防火墙更改。

在Vista或更高版本中,如果您需要ipsecfunction但不关心旧版PolicyAgent实现,则使用FirewallAPI.dll是一个简单的选择。

我一开始并没有意识到这是一个选项,因为我不知道Vista中的高级防火墙以及后来在WFP(Windows过滤平台)中真正结合了IPSec和防火墙,并使传统的IPSec实施通过PolicyAgent。

这意味着使用FirewallAPI.dll可以赋予IPSec的所有function以及防火墙的状态智能,这正是我想要的。 我只是添加黑名单规则(因为黑名单规则优先),并在需要时通过API添加到黑名单,WFP开始丢弃流量。 完成!

在IIS 7中,可以直接从配置文件中操作IP限制,而不会弄乱元数据库。 为了便于维护,可以使用configSource拆分配置文件,以便可以将IPSecure部分保存到自己的文件中。

全文:
http://boseca.blogspot.com/2010/12/programmatically-addremove-ip-security.html

你不能用WMI做到这一点。 WMI仅限于TCP过滤,这意味着阻止端口。 而已。

如果您使用的是以前的Windows版本,则可以:

a)使用命令行工具,在这种情况下是ipseccmd.exe或ipsecpol.exe(W2K),或netsh

要么

b)将策略写入注册表

我的猜测是命令行工具就是这样:它们将值写入注册表。

我已经进入它一段时间了,我没有找到托管代码解决方案。 太糟糕了,以前的Windows版本中没有WFP API。