web-dev-qa-db-ja.com

socatを使用してUDPパケットごとにコマンドを実行するにはどうすればよいですか?

到着する各UDPパケットを印刷しようとしています。 xxdを使用して、ASCIIコンテンツと生データ(16進数として)を出力したいと思います。

これまで私はsocat - udp4-listen:11255,reuseaddr,fork | xxdを使用しました

この種の機能は機能しますが、xxdは、出力の完全な行を出力できるようになるまで入力をバッファリングします。

socatに、到着するudpパケットごとに新しいコマンドを実行させたいのですが。私はもう試した

socat -u udp4-listen:11255,reuseaddr,fork system:"/usr/bin/xxd - /tmp/foo"

パケットごとに新しいxxdをフォークしますが(これは良いことです)、パケットを渡した後に入力を閉じるのではなく、実行を続けます。

UDPパケットを渡した後、フォークされたプロセスの入力をsocatで閉じる方法はありますか?

3
Jiri Kraml

socat -u udp4-recvfrom:11255,reuseaddr,fork exec:"/usr/bin/xxd - /tmp/foo"

それをします。違いは、udp4-recvfromの代わりにudp4-listenを使用することです。前者はパケットごとの入力を処理するようですが、後者はパケットをストリームに連結します。

3
Jiri Kraml