を使用して TCP 経由で UDP トラフィックを転送しようとしていますsocat
。このプロセスによってフレーム境界が失われることはわかっていますが、この場合は問題ありません。このコマンドを使用して、部分的に機能させることができました:
socat TCP-LISTEN:20000,fork UDP4-LISTEN:10000,reuseaddr
つまりsocat
、クライアントが TCP ソケットに接続するのを待ってから、UDP ソケットをリッスンする新しい子プロセスを fork します。複数のクライアントが TCP を使用して接続できる必要があり、すべてのクライアントが受信したすべての UDP メッセージを取得する必要があります。これは、単一のエンドポイントのみが UDP ソケットにデータを送信している限り機能します。ただし、2 番目のエンドポイントが UDP ソケットにデータを送信している場合、そのデータは既に確立されている TCP 接続を介して転送されません。
socat
フォークされた子プロセスで UDP ソケットを呼び出すconnect()
と、最初のパケットを受信したり、他のホストから送信されたデータをフィルタリングしたりするとすぐに呼び出されるようです。
socat
UDP トラフィックをフィルタリングせず、リッスンしている UDP ソケットに送信されたエンドポイントからパケットを転送するように指示する方法はありますか?