【发布时间】:2025-11-27 16:25:01
【问题描述】:
我知道如何执行 IPsec 更改的唯一方法是调用 netsh 进行更改。有没有直接使用 System.Management 和 WMI 对象的方法?如果是这样,它是什么?我很难通过 MSDN 找到相关的 WMI 信息。
或者还有其他有用的方法有人用过吗?
编辑:我在 C# 中工作,对于基于 .NET System.Management 的答案,我更喜欢 C# 示例。
谢谢!
【问题讨论】:
我知道如何执行 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) 相关:在 Vista 或更高版本上使用 FirewallAPI、INetFwRule 接口和其他任何可能需要的东西对防火墙进行编程更改。
在 Vista 或更高版本上,如果您需要 ipsec 功能但不关心旧的 PolicyAgent 实施,则使用 FirewallAPI.dll 是一个简单的选择。
起初我没有意识到这是一个选项,因为我不知道 Vista 和后来的高级防火墙真正结合了 IPSec 和 WFP(Windows 过滤平台)中的防火墙,并通过 PolicyAgent 保持旧的 IPSec 实现。
这意味着使用 FirewallAPI.dll 可以提供 IPSec 的所有功能以及防火墙的状态智能,这正是我想要的。我只是添加黑名单规则(因为黑名单规则优先),并在需要时通过 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) 将策略写入注册表
我的猜测是命令行工具就是这样做的:它们将值写入注册表。
我已经研究了一段时间,但我没有找到托管代码解决方案。太糟糕了,WFP API 在以前的 Windows 版本中不可用。
【讨论】: