2017-01-19 8 views
0

netcat(netcat-openbsd 1.105-7ubuntu1)を実行し、チャットシーケンスをシミュレートします。私はnetcatの応答を自動的にしたい。netcatで条件付き応答が可能です

私が欲しいものの例。

NETCAT: nc -l 8080 

CLIENT: nc localhost 8080 

CLIENT: hello 

NETCAT: (if statment) 
     if hello 
      do hello friend 

     if bye 
      do bye friend 
      send a FIN tcp 

     default 
      date() 

私はこの質問(@wooghieによるasnwer中)のコードをコピー:run a command conditionally with netcat and grepを...しかし、メッセージがクライアントに送信されませんでした。 Netcatはリッスンモードになりました。

#!/bin/bash 

netcat -l 8080 | while read line 
do 
    match=$(echo $line | grep -c 'Hello') 
    if [ $match -eq 1 ]; then 
     printf "Hello friend\r\n\r\n" 
    fi 
done 
+0

いいえstdin *と*の両方を入力し、stdoutでフィードする必要があります。したがって、 'netcat -l'を使うことはperlやpythonで' netcat -l'全体を再実装するよりもはるかに複雑で壊れやすいものです。 – kubanczyk

+0

@kubanczyk - あなたは完全に名前付きパイプを使うことができます。 Bashの 'coproc'はそれをより簡単にします:http://stackoverflow.com/a/36327396/477563 –

+0

タグに' expect'を追加すると、@ GlennJackmanはそのようなものに彼の巨大な知恵を共有するかもしれません.... –

答えて

0

期待していると思います(1)。

#!/usr/bin/env expect 
spawn nc localhost 8080 
expect { 
    hello { 
    send "hello dude" 
    } bye { 
    close 
    } -re .* { 
    send [date] 
    } 
} 

期待しているのは、実際には非常に強力なTclだということに注意してください。
テストされていません。 YMMV。

関連する問題