web-dev-qa-db-ja.com

stdinとstdoutをポートにリダイレクトする

Pから読み取ってstdinに書き込むプログラムstdoutを使用したいのですが、ncまたはそれから読み取るものに接続します特定のポートと別のポートに出力します。

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

ポート60606と書き戻すにはどうすればよいですか?

9
Yimin Rong

私は誰かが2 TCPマシンへの接続を1つはポート50505に、もう1つはポート60606に接続し、最初のPにデータを送信してPに供給し、 2番目の接続からのPの出力TCP=接続の場合、次のようになります。

< /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
11

ポートを操作するために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.
3
Hauke Laging