我可以通过c#代码获取防火墙的状态吗? 我希望在防火墙阻止时通知用户
答案 0 :(得分:3)
您可以通过WMI,因为任何防火墙都必须通过WMI报告其状态(这是安全中心显示状态的方式)。
互联网上的信息很少,这些可能是起点:
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解决方案,但这对我来说效果很好。