2011-06-27 9 views
1

リモートホストが特定のUDPポート番号でリッスンしているかどうかを調べようとしています。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); 

誰が聴いていない場合、私はのErrorCode WSAECONNRESET(10054)とのソケット例外として受け取るに報告されるICMP「到達不能ポート」を取得:次のように私は(C#で)これを行います。すべて意味がありますが、Windowsファイアウォールが無効になっている場合にのみ発生します。ファイアウォールが有効になっている場合(たとえ私がプログラムの例外を作成したとしても)、おそらくファイアウォールがICMP "port unreachable"を食べてしまったので、私はErrorCode WSAETIMEDOUT(10060)を取得します。

提案がありますか?私はファイアウォールの "高度なセキュリティ"の設定を調べたが、役に立たない。

おかげで...

+0

この問題は、WindowsファイアウォールのICMP「宛先到達不能」メッセージ(「ポート到達不能」は「宛先到達不能」の種類 - タイプ3、コード3)のファイアウォールを開くカスタムルールで修正することができます。しかし、これを行うには、SendTo/ReceiveFromテストを実装する実行可能ファイルだけでなく、すべてのプログラムにルールを適用する必要があります。 – Fred

答えて

1

は、上記のコメントを参照してください。 SendTo/ReceiveFromテストを実装する実行可能ファイルだけでなく、ファイアウォールを開いているルールをすべてのプログラムに対して「宛先到達不能」メッセージに適用する必要があります。

関連する問題