如何通过c#检查远程服务器上的windows防火墙状态?

本文关键字:windows 防火墙 状态 服务器 何通过 检查 | 更新日期: 2023-09-27 18:04:14

如何通过c#检查远程服务器上的windows防火墙状态?

我已经调查了使用WMI呼叫,但根/SecurityCenter2只保存第三方防火墙信息,我还没有无法找到Windows防火墙信息。

似乎搜索注册表可能是下一个选择,但在我走下这条路之前,我想看看是否有人有任何其他的想法/建议或代码示例?

如何通过c#检查远程服务器上的windows防火墙状态?

我所做的是使用PSexec来执行防火墙的命令:

Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.FileName = path; //the path of PsExec.exe
        p.StartInfo.Arguments = @"''" + ip + " netsh advfirewall show domain state "; //you can change domain for allprofile in order to look for all profile firewall information
        p.StartInfo.RedirectStandardOutput = true;
        p.Start();
        string output = p.StandardOutput.ReadToEnd();
        Console.WriteLine(output)
        if (output.Contains("ON"))
        {
           "Domain Firewall enabled";
        }else{
           "Domain Firewall disabled";
        }

PsExec:https://technet.microsoft.com/en-us/sysinternals/bb897553.aspx获取PsExec.exe

string path = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) + "''Resources''PsExec.exe";
        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.FileName = path;
        p.StartInfo.Arguments = @"''" + ip + " netsh advfirewall show domain state ";
        p.StartInfo.RedirectStandardOutput = true;
        p.Start();
        string output = p.StandardOutput.ReadToEnd();
        if (output.Contains("ON"))
        {
            object[] rowResult = { "0", "Server Info", "Domain Firewall enabled, it should be disabled." };
            resultList.Add(rowResult);
        }
        else
        {
            object[] rowResult = { "1", "Server Info", "Domain Firewall disabled." };
            resultList.Add(rowResult);
        }
        return resultList;