netcatは応答を印刷しません

netcatは応答を印刷しません

netcatパイプレスポンスを使用してTCPポートにコマンドを送信しようとしています。コマンドを
実行しnetcatて入力すると応答は正しく印刷されますが、パイプからコマンドを渡すとコマンドは正しく送信されますが、応答は印刷されません。

したがって、これは正しく機能します。

netcat  localhost 9009

これはコマンドを送信するだけで応答を印刷しません。

echo 'my_command' | netcat  localhost 9009

なぜ?応答テキストを
どのように印刷できますか?netcat

ベストアンサー1

これを使用してください:

cat <(echo command) - | nc host port

問題はncstdinが閉じるとすぐに接続が閉じられるということですが、これは単純なmy_command文字列の場合は非常に高速なので応答を受ける機会がまったくありません。 (非常に大きなファイルをパイプすると、ファイル転送が完了する前に応答を受け取ることができます。)

2番目のcat引数入力-cat最初の引数の内容を送信した後、より多くの内容のために標準入力を受け取ります。最初のパラメータはechoコマンドが実行されるようにしますcat。 laコマンドを含むファイルでもかまいませんcat < file - | ...

またはこれを行う:

(echo command; while true; do sleep 0.01; echo -n "#"; done) | nc host port

#入力の2行目に無限の文字を送信します。#Bashなどのリモートデバイスを使用する場合、このコメントは無視されます。ここでは、接続側でより速く反応するように、10ミリ秒という短い待ち時間を選択しました。 YMMV。

これの欠点は、シェルにぶつかるかヒットするまでcatループがwhile実行され続けることです。実際にはリモート側によって異なります。nc^C^D

-w 1(OSX netcat)または(nmapの場合はncat)を使用してタイムアウトを追加すると、1秒後に接続が閉じますが、一部の文字を入力して-i 1パイプが切断されるまで実行されます。nccat

ただし、コマンドを受信して​​処理した後、リモート側が自動的に接続を閉じると機能します。これにより、ncクライアントとクライアントに入るプロセスパイプも終了します。

この回答は以下に基づいています。これは同じスーパーユーザーの質問に対する答えです。

おすすめ記事