2017-01-19 38 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

不需要。您需要輸入標準輸入*和*由標準輸入提供。因此,使用'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,這是非常強大的權利。
未經測試。因人而異。