netcatリスナーのシェルスクリプトはクライアントと通信します。

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

「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

これを行う必要があります。

おすすめ記事