我知道如何执行 IPsec 更改的唯一方法是调用 netsh 来进行更改。有没有直接使用 System.Management 和 WMI 对象的方法?如果是这样,那是什么?我很难通过 MSDN 找到相关的 WMI 信息。
或者有人使用过其他有用的方法吗?
编辑:我正在使用 C# 工作,并且更喜欢关于基于 .NET System.Management 的答案的 C# 示例。
谢谢!
最佳答案
1) 准确:WMI。
EnableIPFilterSec WMI 类静态方法可以跨所有 IP 绑定(bind)的网络适配器全局启用 IP 安全。启用安全性后,可以使用 EnableIPSec WMI 类方法更改任何特定适配器的安全特性。前者的 MSDN 在这里:
http://msdn.microsoft.com/en-us/library/aa390381%28VS.85%29.aspx
有关 EnableIPSec 及其参数(允许您声明端口和协议(protocol)列表)的信息,请参阅此 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 接口(interface)以及其他可能需要的任何内容在 Vista 或更高版本上进行编程防火墙更改。
在 Vista 或更高版本上,如果您需要 ipsec 功能但不关心旧的 PolicyAgent 实现,那么使用 FirewallAPI.dll 是一个简单的选择。
我一开始并没有意识到这是一个选项,因为我不知道 Vista 中的高级防火墙以及后来的 WFP(Windows 过滤平台)中真正结合了 IPSec 和防火墙,并让旧版 IPSec 实现通过 PolicyAgent 进行。
这意味着使用FirewallAPI.dll可以提供IPSec的所有功能以及防火墙的状态智能,这正是我想要的。我只是添加黑名单规则(因为黑名单规则优先),并在需要时通过 API 添加到黑名单,WFP 开始丢弃流量。完成!
关于c# - 使用 C# 以编程方式更改 ipsec 规则的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609882/