我有一個通過api與NetApp設備通信的應用程序。打開Windows防火牆後,api命令將失敗。關閉防火牆後,api命令就可以工作。我沒有收到類似「Windows防火牆阻止此程序」的消息。檢測Windows防火牆是否阻止了我的程序
翻閱文檔,我相信我發現需要打開api命令才能工作的TCP端口。如何以編程方式檢測端口是否被阻塞,以便我可以向潛在問題的用戶顯示消息?
我有一個通過api與NetApp設備通信的應用程序。打開Windows防火牆後,api命令將失敗。關閉防火牆後,api命令就可以工作。我沒有收到類似「Windows防火牆阻止此程序」的消息。檢測Windows防火牆是否阻止了我的程序
翻閱文檔,我相信我發現需要打開api命令才能工作的TCP端口。如何以編程方式檢測端口是否被阻塞,以便我可以向潛在問題的用戶顯示消息?
防火牆管理器通過COM公開自己並實現IsPortAllowed
,這裏是與管理器交互的interop example。
檢測端口是否被阻塞 - 在Win7上,您可以通過打開Windows防火牆來查看窗口防火牆日誌 - 單擊左側的高級設置,然後打開監控分支。
注意在日誌記錄設置的監視選項卡上的部分有一個選項登錄到文件,我的Win7 PC上%systemroot%\system32\LogFiles\Firewall\pfirewall.log
- 你可以只解析該文件。我過去已經研究過,有些實用程序可以爲你做這件事,但是,在一天結束時它只是一個標準格式的日誌文件。
對不起,我澄清了這個問題,但我怎樣才能以編程方式做到這一點? – Web
爲什麼-1?我的答案在編輯之前以編程方式執行此操作。 –
是的,和我一樣:-S。 – OnesimusUnbound
我懷疑防火牆會提到它阻止了應用程序,否則入侵者可以獲得有關阻止他訪問系統的信息:-)。
通常情況下,防火牆記錄嘗試從電腦連接到電腦,連接成功與否,您可以檢查它。
更新*
您可以在網絡中嘗試Acknowledgement。如果您在某段時間內沒有收到任何消息,那麼您可以放心地說,連接中存在問題。
你可以這樣做我想:試一試: 更改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偵聽
現在我想知道爲什麼這個編程答案得到-1。 – OnesimusUnbound
是的,爲什麼這是downvoted?答案有什麼問題? – Web
這告訴你什麼關於Windows防火牆。有一百萬個和一個其他原因爲什麼這可能失敗。 – Roddy
+1似乎回答了編程問題。 – 2011-08-04 14:42:40
這僅適用於傳入的UDP端口 - 添加傳出規則以阻止流量不會被此功能檢測到。此外,如果傳入的UDP端口被報告爲阻塞,那麼仍有可能對防火牆進行打孔。 – Pete
任何想法如何檢測傳出UDP是否被阻止? – Pete