web-dev-qa-db-ja.com

クライアントと通信するためのnetcatリスナーのシェルスクリプト

私の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

「Tellmeyour name」、「I got ...」、「Tell me some other」の行をクライアント画面に表示し、クライアント側からの入力をスクリプトに入力したいと思います。

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

Open-BSD netcatは、接続が確立された後にファイルを実行するのに役立つ-eまたは--execコマンドをサポートしていないようです。リモートマシンが接続されたマシンに対して潜在的に有害なコマンドを実行する可能性があるため、これらのコマンドは危険であると見なされます。
回避策として、Open-BSD netcatをアンインストールし、サイトのソリューションに従って従来のnetcatサーバーをインストールしました https://stackoverflow.com/questions/10065993/how-to-switch- to-netcat-traditional-in-ubunt 。これにより、-execコマンドにアクセスできるようになりました。サーバーで実行するコマンドは次のとおりです。nc-l-pport-number -eFile-Script-to-execute

3

さて、ここで私は小さな例を設定しました:

#!/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