私のnetcatサーバーに名前やその他の情報を要求する次のスクリプトがあります。
*echo "Tell me your name"
read $ln
echo "I got '$ln'"
echo "Tell me something more"
while read ln; do
echo "I got '$ln'"
echo "Tell me something more"
done*
クライアントがこのサーバーに接続すると、スクリプトはクライアントと直接通信したいと思います。サーバー側では、次のことを行います。while true; do nc -l -p port-no | ./My-script-file ; done
whileループは、1つのクライアントが接続を閉じた後でもサーバーがリッスンし続けるためのものです。しかし、なぜかクライアント側にクエリを表示させることはできません。
クライアント側では、次のことを行います。nc server-ip port-no
「Tell me your name」、「I got...」、「Tell me another 何か」という行をクライアント画面に表示し、クライアントの入力をスクリプトにインポートしたいと思います。
のようなオプションも試しましたが--exec
、表示されるエラーは次のようになります。-e
--sh-exec
nc: invalid option -- '-'
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
[-m minttl] [-O length] [-P proxy_username] [-p source_port]
[-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
[-X proxy_protocol] [-x proxy_address[:port]] [destination] [port]
答え1
いいですね。ここに小さな例を設定しました。
#!/bin/bash
while read -p 'Tell me your name: ' ln;
do
echo "I got $ln";
done
したがって、スクリプトを保存して実行可能にし、次のように実行します。
サーバー上
nc -l -p 4444 -k --sh-exec ./yourscript
これにより、-k
接続は開いたままになり、ループは不要です。
クライアントから
nc hostname 4444
foo bar
これを行う必要があります。
答え2
Open-BSD netcatは、接続設定後にファイルコマンドの実行をサポートし-e
たり助けたりしないようです。--exec
これらのコマンドは、リモートコンピュータが接続されているコンピュータに対して潜在的に有害なコマンドを実行する可能性があるため、危険と見なされます。
回避策として、Open-BSD netcatを削除し、Webサイトのソリューションに従って既存のnetcatサーバーをインストールしました。https://stackoverflow.com/questions/10065993/how-to-switch-to-netcat-traditional-in-ubuntu。これにより、-execコマンドにアクセスできます。サーバーで実行するコマンドは次のとおりです。 nc -l -p ポート番号 -e ファイル実行するスクリプト