Tôi đang tiến hành kiểm tra Tường lửa. Mã sau đây khá dễ dàng kiểm tra trạng thái của tường lửa Windows mặc định:Kiểm tra Tường lửa của Bên Thứ ba trên Máy
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;
}
Câu hỏi sau đó trở thành: Làm cách nào để tìm trạng thái của tường lửa không phải Windows? Nếu Tường lửa được tích hợp đúng cách, việc kiểm tra ở trên có hoạt động giống nhau hoặc có phương pháp tốt hơn để thực hiện việc này không? Tôi đã kiểm tra bài đăng này: C# Windows Security Center Settings và bài đăng này: C# - How to chceck if external firewall is enabled? nhưng cả hai đều tỏ ra tương đối không hữu ích.
Tôi đã xem xét API WMI nhưng điều này khá khó hiểu cho đến nay và tài liệu qua MSDN không quá hứa hẹn. Tôi cũng đã cố gắng rối tung xung quanh với SelectQuery nhưng cho đến nay tôi đã không thành công. Có ai có thể hỗ trợ tôi trong một điểm khởi đầu mới hoặc nơi tôi có thể tìm thấy tài liệu/hướng dẫn tốt hơn liên quan đến Tường lửa của bên thứ 3 không?
EDIT: Hiện tại tôi đang khám phá thêm về WMI, cụ thể là lớp FirewallProduct
như được đề xuất bởi bài đăng.
UPDATE 2: Tôi đã được thử nghiệm đoạn mã sau:
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);
Nhưng chạy kết quả này trong các lỗi sau: Exception Invalid namespace
và nó trỏ tới dòng 39 (scope.Connect()
). Tôi sẽ không ngạc nhiên nếu tôi chỉ đơn giản là bỏ lỡ một tham số hoặc định dạng một cái gì đó không đúng, tôi chỉ không biết nó là gì.
CẬP NHẬT 3 Chuyển từ SecurityCenter2
sang SecurityCenter
vẫn mang lại cùng một lỗi invalid namespace
.
CẬP NHẬT 4 Tôi đã chuyển ứng dụng bảng điều khiển sang một hộp khác (win7 không winserver08r2) và được báo cáo đúng cách như mong đợi. Vì vậy, nó có thể là một vấn đề với VM mà tôi hiện đang thử nghiệm. Bước tiếp theo là phân tích trạng thái hoạt động/không hoạt động
CẬP NHẬT 5 Đã được thử nghiệm trên một hộp Server08 khác và xuất hiện lỗi invalid namespace
. Sử dụng SecurityCenter
thay vì SecurityCenter2
không giải quyết được sự cố. Có một số tính năng bảo mật cơ bản của Windows Server OS sử dụng để ngăn chặn giả mạo với tường lửa, hoặc làm hệ điều hành máy chủ không đi kèm với một tập hợp các tính năng WMI cụ thể?
Bạn có thể khám phá trang này http: //www.codeproject.com/Articles/37714/Software-Development-Build-your-own-Windows-Securi Ba liên kết tham chiếu ở dưới cùng cũng trỏ đến một số trang hữu ích. – Gary
Không gian tên 'SecurityCenter2' là dành cho Windows Vista, 7 và 8, đối với XP, bạn phải sử dụng không gian tên' SecurityCenter'. – RRUZ
@wjhguitarman - Tại sao bạn cần phát hiện nếu tường lửa được cài đặt? –