3

netcat接続が確立されている間(この場合、ユーザーはクライアントncとして使用しています) 、ネットワークを介して(を使用して)メッセージを送受信する機能をユーザーに提供する必要があります。問題は、ユーザーが対話を開始する前に回線を送信する必要があることです。私の最初の試みは:

echo 'my first line' | nc server port

このアプローチの問題は、実行が終了すると接続がnc 閉じechoられるため、シェルが返されるためにユーザーがstdinを介してコマンドを送信できないことです(また、開始に数秒かかるため、サーバーからの応答が受信されません)応答し、nc接続を閉じると、ユーザーが応答を受信することはありません)。

また、コマンドをグループ化してみました。

{ echo 'my first line'; cat -; } | nc server port

ほぼ必要な方法で動作しますが、サーバーが接続を閉じると、を押し<ENTER>てシェルを再度取得するまで待機します。サーバーが接続を閉じるときにシェルを元に戻す必要があります(この場合、クライアント(ncコマンド)は、Ctrl + Cを押さない限り、接続を閉じることはありません)。

名前付きパイプも試しましたが、成功しませんでした。

それを行う方法について何かヒントはありますか?

注:私はopenbsd-netcatを使用しています。

4

5 に答える 5

1

あなたはおそらく調べたいと思うでしょうexpect(1)

于 2012-03-28T23:23:54.930 に答える
1

それはcat「入る」を待つことです。ncを強制終了するために実行するスクリプトを作成するcatと、自動的にシェルに戻ります。

于 2012-11-08T17:08:37.863 に答える
0

を使用することをお勧めしますがcat << EOF、期待どおりには機能しないと思います。

EOF接続が閉じているときに送信する方法がわかりません。

于 2012-03-29T00:12:07.973 に答える
0

これを試して、うまくいくかどうかを確認できます。

perl  -e "\$|=1;print \"my first line\\n\" ; while (<STDIN>) {print;}" | nc server port
于 2012-03-29T01:04:39.357 に答える