1
我正在嘗試確定遠程主機是否正在偵聽特定的UDP端口號。我這樣做(在C#),如下所示:Windows防火牆阻止ICMP端口無法訪問?
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
int sent = socket.SendTo(bufsend, bufsend.Length, SocketFlags.None, endpoint);
int recv = socket.ReceiveFrom(bufrecv, ref endpoint);
如果沒人在聽,我得到一個ICMP「端口不可達」,這是報告的接收與錯誤碼WSAECONNRESET套接字異常(10054)。所有這一切都有道理,但它只發生在Windows防火牆被禁用時。如果防火牆已啓用 - 即使我爲該程序設置了一個例外 - 我得到ErrorCode WSAETIMEDOUT(10060),大概是因爲防火牆已經吃掉了ICMP「端口不可達」。
有什麼建議嗎?我已經檢查過防火牆的「高級安全性」設置,但無濟於事。
謝謝...
可以使用Windows防火牆中的自定義規則修復此問題,該規則將防火牆打開爲ICMP「目標不可達」消息(「端口不可達」是一種「目標不可達」 - 類型3,代碼3)。但要做到這一點,您必須將規則應用於所有程序,而不僅僅是實施SendTo/ReceiveFrom測試的可執行程序。 – Fred