2011-08-04 84 views
8

我有一個通過api與NetApp設備通信的應用程序。打開Windows防火牆後,api命令將失敗。關閉防火牆後,api命令就可以工作。我沒有收到類似「Windows防火牆阻止此程序」的消息。檢測Windows防火牆是否阻止了我的程序

翻閱文檔,我相信我發現需要打開api命令才能工作的TCP端口。如何以編程方式檢測端口是否被阻塞,以便我可以向潛在問題的用戶顯示消息?

回答

11

防火牆管理器通過COM公開自己並實現IsPortAllowed,這裏是與管理器交互的interop example

+0

+1似乎回答了編程問題。 – 2011-08-04 14:42:40

+0

這僅適用於傳入的UDP端口 - 添加傳出規則以阻止流量不會被此功能檢測到。此外,如果傳入的UDP端口被報告爲阻塞,那麼仍有可能對防火牆進行打孔。 – Pete

+0

任何想法如何檢測傳出UDP是否被阻止? – Pete

3

檢測端口是否被阻塞 - 在Win7上,您可以通過打開Windows防火牆來查看窗口防火牆日誌 - 單擊左側的高級設置,然後打開監控分支。

注意在日誌記錄設置的監視選項卡上的部分有一個選項登錄到文件,我的Win7 PC上%systemroot%\system32\LogFiles\Firewall\pfirewall.log - 你可以只解析該文件。我過去已經研究過,有些實用程序可以爲你做這件事,但是,在一天結束時它只是一個標準格式的日誌文件。

+0

對不起,我澄清了這個問題,但我怎樣才能以編程方式做到這一點? – Web

+0

爲什麼-1?我的答案在編輯之前以編程方式執行此操作。 –

+0

是的,和我一樣:-S。 – OnesimusUnbound

1

我懷疑防火牆會提到它阻止了應用程序,否則入侵者可以獲得有關阻止他訪問系統的信息:-)。

通常情況下,防火牆記錄嘗試從電腦連接到電腦,連接成功與否,您可以檢查它。

更新*

您可以在網絡中嘗試Acknowledgement。如果您在某段時間內沒有收到任何消息,那麼您可以放心地說,連接中存在問題。

8

你可以這樣做我想:試一試: 更改1433爲你想檢查的端口。

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); 
      } 
     } 
    } 
} 

而且,要看到哪些端口是在你的機器運行可用:

C:>的netstat -an |找到/我 「聽」

TCP 0.0.0.0:25 0.0 .0.0:0 LISTENING

TCP 0.0.0.0:80 0.0.0.0:0偵聽

TCP 0.0.0.0:135 0.0.0.0:0偵聽

+0

現在我想知道爲什麼這個編程答案得到-1。 – OnesimusUnbound

+1

是的,爲什麼這是downvoted?答案有什麼問題? – Web

+1

這告訴你什麼關於Windows防火牆。有一百萬個和一個其他原因爲什麼這可能失敗。 – Roddy

相關問題