【发布时间】:2010-10-16 17:40:55
【问题描述】:
我希望能够使用 C# 以编程方式在 Windows Server 2003 上添加或删除 IP 安全策略。
通常您会通过 gpedit.msc 管理单元手动操作这些策略(在 Windows 设置 -> 本地策略 -> 本地计算机上的 IP 安全策略下)。但我需要能够通过代码添加 IP 过滤策略。
关于如何做到这一点的任何想法?
【问题讨论】:
我希望能够使用 C# 以编程方式在 Windows Server 2003 上添加或删除 IP 安全策略。
通常您会通过 gpedit.msc 管理单元手动操作这些策略(在 Windows 设置 -> 本地策略 -> 本地计算机上的 IP 安全策略下)。但我需要能够通过代码添加 IP 过滤策略。
关于如何做到这一点的任何想法?
【问题讨论】:
您可以使用 System.Diagnostics.Process 并使用 ipsec 命令作为参数运行“cmd.exe”。
您可以尝试的另一个资源是Microsoft's website 或Google。
【讨论】:
我已经处理这个问题大约两周了,不幸的是,您有两种选择,具体取决于您需要的控制深度:
1) 使用 WMI 直接操作。与直觉相反,这实际上暴露了比选项#2 更少的控制(这是我自己正在做的)。这都是通过 Win32_NetworkAdapterConfiguration 类完成的。这是我提出的问题的链接,我在研究后不久回复了它:
Methods of programatically altering ipsec rules with C#?
这会暴露较少的功能,因为您只能通过 IPsec 为适配器控制三件事:TCP 端口、UDP 端口、IP 协议。 (您不能处理多个策略、不同的子网掩码等)
2) 包装 netsh ipsec 来完成你所有的脏活。这是要走的路,因为 powershell(可以通过 System.Management.Automation 中的 PowerShell 类调用)目前缺少用于更改 IPSec 的 cmdlet。
Is there a cmdlet in PowerShell 2 to handle ipsec changes?
通过 System.Management.Automation.PowerShell 调用的 powershell 管道包装 netsh ipsec 是我最终要做的。
使用 System.Diagnostics.Process 来生成和控制 shell,或者使用上面提到的 PowerShell 类。两者都应该完成工作。
注意 如果您在某个时候切换到 2008,请注意 netsh ipsec 已弃用,并确保改用 netsh advfirewall。
祝你好运!
【讨论】: