2017-01-19 18 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() 

Я скопировал код этого вопроса (в asnwer по @wooghie): 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» значительно сложнее/хрупко, чем повторно реализовать целую «netcat -l» в perl или python. – kubanczyk

+0

@kubanczyk - Вы полностью могли использовать именованные каналы. «Копрок» Баша облегчает работу: http://stackoverflow.com/a/36327396/477563 –

+0

Попробуйте добавить «ожидать» к тегам, а @GlennJackman может поделиться своей огромной мудростью с такими вещами .... –

ответ

0

Я думаю, что вы хотите ожидать (1). Что-то вроде:

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

Обратите внимание, что ожидание действительно является Tcl, которое очень мощно само по себе.
Не проверено. YMMV.

 Смежные вопросы

  • Нет связанных вопросов^_^