ファイアウォールのチェックに取り組んでいます。次のコードは、既定の Windows ファイアウォールの状態を非常に簡単に確認します。
INetFwMgr manager = GetFireWallManager();
bool isFirewallEnabled = manager.LocalPolicy.CurrentProfile.FirewallEnabled;
if (isFirewallEnabled == false)
{
Console.WriteLine("Firewall is not enabled.");
}
else
{
Consoe.WriteLine("Firewall is enabled.");
}
Console.ReadLine();
private static INetFwMgr GetFireWallManager()
{
Type objectType = Type.GetTypeFromCLSID(new Guid(firewallGuid));
return Activator.CreateInstance(objectType) as INetFwMgr;
}
問題は、次のようになります。Windows 以外のファイアウォールの状態を確認するにはどうすればよいですか? ファイアウォールが適切に統合されている場合、上記のチェックはまったく同じように機能しますか、それともこれを行うためのより良い方法はありますか? この投稿を確認しました: C# Windows セキュリティ センターの設定とこの投稿: C# - 外部ファイアウォールが有効になっているかどうかを確認する方法 しかし、どちらも比較的役に立たないことが判明しました。
私は WMI API を調べてきましたが、これまでのところかなり混乱しており、MSDN のドキュメントはあまり有望ではありませんでした。私もSelectQueryをいじってみましたが、これまでのところ成功していません。新しい出発点、またはサードパーティのファイアウォールに関するより良いドキュメント/手順を見つけることができる場所で、誰かが私を助けてくれますか?
編集:現在、私はWMI、特にFirewallProduct
投稿で提案されているクラスをさらに調査しています。
更新 2:次のスニペットをテストしています。
string wmiNameSpace = "SecurityCenter2";
ManagementScope scope;
scope = new ManagementScope(String.Format("\\\\{0}\\root\\{1}", "localhost", wmiNameSpace), null);
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM FirewallProduct");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
しかし、これを実行すると次のエラーが発生し、
Exception Invalid namespace
39 行目を指します ( scope.Connect()
)。単純にパラメーターを見逃したり、何かを不適切にフォーマットしたりしても、まったく驚かないでしょう。それが何であるかわからないだけです。
UPDATE 3 から に切り替えSecurityCenter2
てSecurityCenter
も、同じinvalid namespace
エラーが発生します。
更新 4 コンソール アプリを別のボックス (winserver08r2 ではなく win7) に移動したところ、期待どおりに適切に報告されました。そのため、現在テストしている VM の問題である可能性があります。次のステップは、アクティブ/非アクティブのステータスを解析することです
更新 5 別の Server08 ボックスでテストされ、同じinvalid namespace
エラーが表示されます。SecurityCenter
の代わりに使用SecurityCenter2
しても問題は解決しません。ファイアウォールの改ざんを防止するために Windows Server OS が使用する基本的なセキュリティ機能はありますか、それともサーバー OS には WMI 機能の特定のキー セットが付属していませんか?