2011-08-04 39 views
8

Tôi có một ứng dụng giao tiếp với thiết bị NetApp thông qua api của chúng. Với tường lửa của windows, lệnh api sẽ thất bại. Với tường lửa tắt, lệnh api hoạt động. Tôi không nhận được bất kỳ thông báo nào như "Windows Firewall đang chặn chương trình này".Phát hiện nếu tường lửa của cửa sổ đang chặn chương trình của tôi

Xem qua tài liệu Tôi tin rằng tôi đã tìm thấy các cổng TCP cần mở để các lệnh api hoạt động. Làm thế nào tôi có thể lập trình phát hiện nếu các cổng bị chặn vì vậy tôi có thể hiển thị một tin nhắn cho người dùng về vấn đề tiềm năng?

Trả lời

11

Trình quản lý tường lửa tự hiển thị thông qua COM và triển khai IsPortAllowed, đây là số interop example tương tác với người quản lý.

+0

+1 Dường như trả lời câu hỏi có lập trình. –

+0

Điều này chỉ hoạt động đối với các cổng UDP đến - thêm quy tắc gửi đi để chặn lưu lượng truy cập không bị phát hiện bởi chức năng này.Ngoài ra, nếu cổng UDP được báo cáo là bị chặn thì vẫn có thể đục lỗ tường lửa. – Pete

+0

Bất kỳ ý tưởng làm thế nào để phát hiện nếu UDP gửi đi bị chặn? – Pete

3

Để phát hiện xem các cổng có bị chặn hay không - trên Win7 bạn có thể xem bản ghi Tường lửa của Windows bằng cách mở Tường lửa của Windows - bấm Thiết đặt Nâng cao ở bên trái rồi mở nhánh Giám sát.

Lưu ý trên tab Giám sát trong phần Cài đặt ghi nhật ký có tùy chọn đăng nhập vào tệp trên máy tính Win7 của tôi là %systemroot%\system32\LogFiles\Firewall\pfirewall.log - bạn chỉ có thể phân tích cú pháp tệp này. Tôi đã nghiên cứu trong quá khứ và có những tiện ích ở đó để làm điều này cho bạn, tuy nhiên, vào cuối ngày nó chỉ là một tệp nhật ký định dạng chuẩn.

+0

Xin lỗi, tôi đã làm rõ câu hỏi, nhưng làm cách nào tôi có thể làm điều này theo chương trình? – Web

+0

Tại sao -1? Câu trả lời của tôi đứng trước chỉnh sửa để làm điều này theo lập trình. –

+0

Vâng, cùng với tôi: -S. – OnesimusUnbound

1

Tôi nghi ngờ rằng tường lửa sẽ đề cập rằng nó chặn ứng dụng, nếu không kẻ xâm nhập có thể có thông tin về những gì ngăn cản anh ta truy cập hệ thống :-).

Thông thường, tường lửa ghi lại các nỗ lực kết nối từ và đến máy tính, thành công hay không, bạn có thể kiểm tra.

Update *

bạn có thể thử Acknowledgement trong mạng. Nếu bạn nhận được không có thời gian nhất định, sau đó bạn có thể an toàn nói rằng có một vấn đề trong kết nối.

8

Bạn có thể làm như sau: Tôi nghĩ: hãy thử: Thay đổi 1433 cho cổng bạn muốn kiểm tra.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net.Sockets; 

namespace CheckPortStatus 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       TcpClient tcp = new TcpClient(); 
       tcp.Connect("localhost", Convert.ToInt16(1433)); 
       Console.WriteLine("online"); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("offline"); 
       Console.WriteLine(ex.Message); 
      } 
     } 
    } 
} 

Ngoài ra, để xem những cổng có sẵn trong máy tính của bạn chạy:

C:> netstat -an | find/i "lắng nghe"

TCP 0.0.0.0:25 0.0 .0.0: 0 NGHE

TCP 0.0.0.0:80 0.0.0.0:0 NGHE

TCP 0.0.0.0:135 0.0.0.0:0 NGHE

+0

Bây giờ tôi tự hỏi tại sao câu trả lời có lập trình này lại có -1. – OnesimusUnbound

+1

Yea, tại sao điều này lại được giảm giá? Có gì sai với câu trả lời? – Web

+1

Điều này sẽ không cho bạn biết gì về Windows Firewall. Có hàng triệu và một lý do khác khiến điều này có thể thất bại. – Roddy

Các vấn đề liên quan