TCP(netcat / socatに似ています)を介してコマンドパラメータとして提供されるリテラル文字列を送信するには?

TCP(netcat / socatに似ています)を介してコマンドパラメータとして提供されるリテラル文字列を送信するには?

シェル環境でTCPを介して文字列を送信するには、次のようにします。

echo text | nc 1.2.3.4 9876

クール。インタラクティブには機能します。別のプログラムでサブプロセスを作成してプログラムでこれを実行したいので、シェルとパイプを使用したくないと思います。

また配布中なのでDistroのないDockerコンテナ、殻がありません。

TCPを介してコマンドパラメータを文字列として送信できる既存のツールはありますか?私が探している(仮想)バリアントですnc。例:

nc 1.2.3.4 9876 text

その機能は次のとおりです。

echo text | nc 1.2.3.4 9876

(出力も必要です。)

私はこれのために私自身のアプリケーションを書こうとしますが、それがすでに存在し、stdinの代わりにargvの1つに渡されることを想像できます。

これを見ると、socatファイルから読み取ることがOPENできます。これは私が望むものと非常に似ていますが、実行するコマンドの引数として文字列を渡す必要があります。

完全なコンテキストでは、Dockerコンテナのエントリポイントは、シェルや他の解釈された言語なしでglibc(socat / ncに似ています)などの純粋なOSのデフォルトの依存関係を使用して設定可能でなければなりません。

答え1

パラメータを受け入れてTCP接続を介して送信するプログラムがわかりません。

しかし、あなたはコメント、特に次の行であなたの質問に答えました。

ENTRYPOINT ["/bin/sh", "-c", "mycommand"]

画像から最小限のアプリケーションスペースが欲しいと思いますが、最高の解決策は元のコマンドを使用することshell ですnetcat。まあ、少なくともあなたがしたいことをテストしてください。

結局のところ、単一の実行可能ファイルに戻るには、それを実行するプログラムを直接作成する必要があります。

アイデア、わかりましたこの例、スクリプトを実行するためのPython設定の表示、

FROM python:2.7-slim AS build-env
ADD . /app
WORKDIR /app

FROM gcr.io/distroless/python2.7
COPY --from=build-env /app /app
WORKDIR /app
CMD ["hello.py", "/etc"]

Cこれはすべてのタスクを実行するプログラムを開発するよりも簡単で高速ですが、実際にはPythonを次のように使用しています。シェル。最後に、socat必要なことができると思われる場合は、socatファイル(画像に含まれている)で読み取りを使用でき、そのファイルにはテキスト文字列が含まれています。

答え2

newlispたとえば、を使用できると思います。

newlisp -e '(write-line (net-connect "localhost" 3456) "go for it")'

必要に応じてパラメータを変更します。

サイズが小さく、静的プログラムにコンパイルされてperlも、他のインタプリタを使用することができると確信しています。newlisp

上記の例では、プログラムはlocalhostポートに接続され、ソケットにラインを発行して3456から終了します。go for it移動ニューリースホームページ詳細については。

答え3

私は必要な機能を実装するために小さなアプリを自分で書いた。パラメータを読み取り、ソケットに書き込みます。残念ながら、まだ存在していませんが、nc同じツールではより複雑な機能しか使用できませんsocat。たぶん、パラメータの入力を受け入れるパッチを書くことができますnc

コメントに答える - 完全なシェルを含み、ここでサブプロセスを作成することが新しい標準であることを読んだのは少し悲しいことです。純粋なオーバーヘッドは必要ありません。

関連情報