使用 C# 在 Windows Server 上添加和删除 IPSec 策略有哪些选项?
我希望能够使用 C# 以编程方式在 Windows Server 2003 上添加或删除 IP 安全策略。
通常,您可以通过 gpedit.msc 管理单元手动操作这些策略(在 Windows 设置 -> 本地策略 -> 本地计算机上的 IP 安全策略下)。 但我需要能够通过代码添加 IP 过滤策略。
关于如何做到这一点有什么想法吗?
I want to be able to add or remove IP Security Policies on Windows Server 2003 programmatically with C#.
Normally you'd manipulate these policies manaully through the gpedit.msc snap-in (under Windows Settings -> Local Policies -> IP Security Policies on Local Computer). But I need to be able to add IP filter policies through code.
Any ideas on how to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我已经处理这个问题大约两周了,不幸的是,您有两种选择,具体取决于您需要的控制深度:
1) 使用 WMI 直接操作。 与直觉相反,这实际上比选项#2(这就是我自己正在做的事情)暴露的控制更少。 这一切都是通过 Win32_NetworkAdapterConfiguration 类完成的。 以下是我提出的有关此问题的问题的链接,以及我在研究后一段时间后的回复:
使用 C# 以编程方式更改 ipsec 规则的方法?
这公开的功能较少,因为您只能通过适配器的 IPsec 控制三件事:TCP 端口、UDP 端口、IP 协议。 (您无法处理多个策略、不同的子网掩码等)
2) 包装 netsh ipsec 来完成所有肮脏的工作。 这是正确的方法,因为 powershell(可以通过 System.Management.Automation 中的 PowerShell 类调用)当前缺少执行 IPSec 更改的 cmdlet。
PowerShell 2 中是否有用于处理 ipsec 的 cmdlet更改?
通过 System.Management.Automation.PowerShell 调用的 powershell 管道包装 netsh ipsec 是我最终所做的。
使用 System.Diagnostics.Process 生成并控制 shell,或者使用上面提到的 PowerShell 类。 要么应该完成工作。
注意
如果您在某个时候切换到 2008,请注意 netsh ipsec 已被弃用,并确保改用 netsh advfirewall。
祝你好运!
I've been dealing with this issue for about two weeks, and, unfortunately, you have two options, depending on the depth of control you need:
1) Direct manipulation with WMI. Counter-intuitively, this actually exposes LESS control than option #2 (which is what I am doing myself). This is all done through the Win32_NetworkAdapterConfiguration class. Here's a link to the question I asked about this, with my response to it awhile later after researching it:
Methods of programatically altering ipsec rules with C#?
This exposes less functionality because you can only control three things through IPsec for the adapters: TCP ports, UDP ports, IP Protocols. (You cannot deal with multiple policies, different subnet masks, etc.)
2) Wrapping netsh ipsec to do all your dirty work. This is the way to go, as powershell (which can be invoked through the PowerShell class in System.Management.Automation) is currently lacking a cmdlet to do IPSec changes.
Is there a cmdlet in PowerShell 2 to handle ipsec changes?
Wrapping netsh ipsec THROUGH a powershell pipeline called through System.Management.Automation.PowerShell is what I ended up doing.
Use either System.Diagnostics.Process to spawn and control a shell, or use the PowerShell class as mentioned above. Either should get the job done.
NOTE
If you switch to 2008 at some point, note that netsh ipsec is deprecated, and make sure to use netsh advfirewall instead.
Good luck!
您可以使用 System.Diagnostics.Process 并以 ipsec 命令作为参数运行“cmd.exe”。
您可以尝试的另一个资源是 Microsoft 网站 或 Google< /a>.
You could use System.Diagnostics.Process and run "cmd.exe" with the ipsec command as the arguments.
Another resource you can try is Microsoft's website or Google.