我可以通过c#代码获取防火墙的状态吗?

时间:2010-07-05 12:28:39

标签: c#

我可以通过c#代码获取防火墙的状态吗? 我希望在防火墙阻止时通知用户

4 个答案:

答案 0 :(得分:3)

您可以通过WMI,因为任何防火墙都必须通过WMI报告其状态(这是安全中心显示状态的方式)。

互联网上的信息很少,这些可能是起点:

http://www.mombu.com/microsoft/windows-xp-wmi/t-remotely-get-wmi-info-from-security-center-601256.html

http://msdn2.microsoft.com/en-us/library/ms950397.aspx

下一步是访问C#中的WMI类:

http://www.csharphelp.com/2006/10/wmi-made-easy-for-c/

http://geekswithblogs.net/PsychoCoder/archive/2008/01/25/using_wmi_in_csharp.aspx

......还有很多其他人,只是google“C#WMI”。

答案 1 :(得分:3)

您可以使用以下链接与Windows防火墙进行交互。包括NetFwTypeLib作为项目的参考。

对于Window Firewall,您可以使用以下代码创建管理器:

Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);

INetFwMgr manager= (INetFwMgr)Activator.CreateInstance(NetFwMgrType);

从那里你可以阅读有关使用Windows防火墙配置的各种方法。

Windows防火墙(Windows XP ...限制Vista和7支持) http://msdn.microsoft.com/en-us/library/aa366452(v=VS.85).aspx

具有高级安全性的Windows防火墙(Windows Vista / 7)

msdn.microsoft.com/en-us/library/aa366459(V = VS.85)的.aspx

答案 2 :(得分:0)

假设您有3个标签,这将显示表单应用程序中所有防火墙的状态。

using System.Diagnostics;
private string getFirewallStatus()
    {
        ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
        processStartInfo.RedirectStandardInput = true;
        processStartInfo.RedirectStandardOutput = true;
        processStartInfo.UseShellExecute = false;


        Process process = Process.Start(processStartInfo);


        if (process != null)
        {
            process.StandardInput.WriteLine("netsh advfirewall show allprofiles | find \"State\"");
            process.StandardInput.Close();
            string outputString = process.StandardOutput.ReadToEnd();
            int count = 0;
            for (int i = 0; i < outputString.Length - 3; i++)
            {
                if (outputString.Substring(i, 3).CompareTo(@"OFF") == 0)
                {
                    count++;
                    switch (count)
                    {
                        case 1: label16.Text = "Off"; label16.ForeColor = System.Drawing.Color.Green; break;
                        case 2: label17.Text = "Off"; label17.ForeColor = System.Drawing.Color.Green; break;
                        case 3: label18.Text = "Off"; label18.ForeColor = System.Drawing.Color.Green; break;
                        default: MessageBox.Show("Firewall status unable to be found!"); break;
                    }
                }
                else if (outputString.Substring(i, 2).CompareTo("ON") == 0)
                {
                    count++;
                }
            }
            count = 0;
            return outputString;
        }
        return string.Empty;
    }    

答案 3 :(得分:0)

在Windows 7计算机上,我这样做是为了检测计算机是否启用了Windows防火墙。我采用与Dylan建议相同的方法。

请记住添加对Microsoft.TeamFoundation.Common的引用。

Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType);
bool firewallEnabled = mgr.LocalPolicy.CurrentProfile.FirewallEnabled;

我希望看到这个任务的WMI解决方案,但这对我来说效果很好。