2017-01-19 2 views
0

Ich möchte netcat (netcat-openbsd 1.105-7ubuntu1) ausführen und simulieren eine Chat-Sequenz. Ich möchte die netcat Antwort automatisch.Ist eine bedingte Antwort möglich mit netcat

Beispiel was ich will.

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

Ich kopierte den Code dieser Frage (im asnwer von @wooghie): run a command conditionally with netcat and grep ... aber die Nachricht nicht an den Client gesendet. Netcat war im Listenmodus.

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

Nein. Sie müssten sowohl stdin * und * von stdout zugeführt werden. Daher ist die Verwendung von 'netcat -l' wesentlich komplizierter/fragiler als die vollständige Implementierung von 'netcat -l' in Perl oder Python. – kubanczyk

+0

@kubanczyk - Sie könnten vollständig Named Pipes verwenden. Bashs "Coproc" macht es jedoch einfacher: http://StackOverflow.com/a/36327396/477563 –

+0

Versuchen Sie 'expect' zu den Tags hinzuzufügen und @GlennJackman kann seine immense Weisheit auf solche Dinge teilen .... –

Antwort

0

Ich denke, Sie wollen erwarten (1). Etwas in der Art von:

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

Beachten Sie, dass erwartet wird, ist wirklich Tcl, die in sich sehr mächtig ist.
Nicht getestet. YMMV.

Verwandte Themen