我希望能够使用 c# 创建一个白名单(或从列表中删除)IP,这些 IP 允许访问 Windows 2012 服务器上的第三方服务的特定端口、端口范围或任何端口。
有没有办法以编程方式控制对其他服务的访问?
我希望能够使用 c# 创建一个白名单(或从列表中删除)IP,这些 IP 允许访问 Windows 2012 服务器上的第三方服务的特定端口、端口范围或任何端口。
有没有办法以编程方式控制对其他服务的访问?
您可以使用以下方法通过命令提示符在 Windows 防火墙上添加规则来禁止 IP:
void BanIP(string RuleName, string IPAddress, string Port, string Protocol)
{
if (!string.IsNullOrEmpty(RuleName) && !string.IsNullOrEmpty(IPAddress) && !string.IsNullOrEmpty(Port) && !string.IsNullOrEmpty(Protocol) && new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
{
using (Process RunCmd = new Process())
{
RunCmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
RunCmd.StartInfo.FileName = "cmd.exe";
RunCmd.StartInfo.Arguments = "/C netsh advfirewall firewall add rule name=\"" + RuleName + "\" dir=in action=block remoteip=" + IPAddress + " remoteport=" + Port + " protocol=" + Protocol;
RunCmd.Start();
}
}
}
用法:
BanIP("Rule1", "151.21.1.1", "3389" "TCP") // Will ban the IP 151.21.1.1 (RDP).
BanIP("Rule2", "151.21.1.1", "Any" "TCP") // Will ban the IP 151.21.1.1 with any TCP ports.
BanIP("Rule3", "151.21.1.1", "3380-3390" "TCP") // Will ban the IP 151.21.1.1 with 3380-3390 TCP port range.
请注意,此命令将从 Windows Server 2012 R2 开始运行,并且需要管理权限。另请记住,作为 C# 代码外部的进程,不能保证这将起作用,您可以添加检查以验证一切是否正常工作。
在 Windows 中,可以使用 powershell 和 netsh 可执行文件访问网络命令。
因此,使用 C#,可以通过使用 System.Diagnostics.Process 类并以这两页中概述的方式将命令传递给此可执行文件来修改防火墙规则:
如何使用 Process 类调用 netsh 已经在下面的帖子中得到解答:Command netsh using C#