2009-04-12 7 views
0

Socket、または条件付きで接続を受け入れることができるListenSocketのメソッドはないようです。.NET:条件付きSocket.Accept

SYNを受信すると、SYN/ACKバック(受信接続)またはRST(強制的な拒否)を送信すると、この接続を送信元によって行うかどうかを決定できます。

これを達成したいのですがありますか?残念ながら、私は受け入れの後すぐに接続を閉じることはできません、それはまったく開かれる必要はありません。また、RAWソケットとして扱う必要もないようにしたいと思います。

答えて

1

残念ながら、これは不可能です。条件付きでTCPソケット接続を使用することはできません。接続が確立された後でのみ、その接続をフィルタリングできます。

しかし、正確に何をフィルタリングしようとしていますか? SYNパケットを取得すると、ソースのIPアドレスと接続しようとしているポートが分かります。ファイアウォールを使用してこのデータに基づいてフィルタリングする方がはるかに優れているようです。私はこれがあなたのアプリを通じて制御されていないことを認識していますが、それは考慮すべき代替案です。

+0

これは、TCPを介したカスタムプロトコルのリピーターサービスです。また、リモート接続が確立できない場合は、ローカル接続を拒否し始める必要があります。また、いくつかのファイアウォール機能も組み込まれています。 –

0

RAWモードにならないとできないようです。ソケットがWinsockのリッスンモードに入ると、Socket.Acceptが呼び出される前でも何もすべてを受け入れます。

この機能を使用するには、RAWモードを使用して、独自のTCPスタックでパケットを解析する必要があります。

0

これもスクラッチです。 Windows XP SP2以降では、RAWソケットよりもTCPパケットの送信をサポートしなくなりました。詳細はhereを参照してください。