標準入力と標準出力をポートにリダイレクト

標準入力と標準出力をポートにリダイレクト

私は読み書きPできますが、特定のポートから読み取って別のポートに出力できるように別のポートに接続するプログラムが欲しいです。stdinstdoutnc

# The reading is easy, here P reads from port 50505
nc -l 50505 | P

ポート60606に書き換えるにはどうすればよいですか?

答え1

私は、誰かがあなたのコンピュータに2つのTCP接続(1つはポート50505、もう1つはポート60606)を開き、最初の接続でPに供給するデータを送信し、2番目の接続でデータを期待できるということです。 TCP 接続は P の出力を読み込みます。それから:

< /dev/null nc -q -1 -l 50505 | P | nc -l 60606 > /dev/null

または以下を使用してsocat

socat -u tcp-listen:50505,reuseaddr - | P | socat -u - tcp-listen:60606,reuseaddr

P出力を同じ接続に戻します。

socat tcp-listen:50505,reuseaddr exec:P

答え2

nc使用するためのポートは必要ありません。bash自分で行うことができます:

Bashは、次の表に示すように、リダイレクトで複数のファイル名を使用するときに特に複数のファイル名を処理します。

/dev/fd/fd
    If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
    File descriptor 0 is duplicated.
/dev/stdout
    File descriptor 1 is duplicated.
/dev/stderr
    File descriptor 2 is duplicated.
/dev/tcp/host/port
   If host is a valid hostname or Internet address, and port is an integer 
   port number or service name, bash attempts to open a TCP connection to
   the corresponding socket.
/dev/udp/host/port
    If host is a valid hostname or Internet address, and port is an integer 
    port number or service name, bash attempts to open a UDP connection to
    the corresponding socket.

関連情報