Dialog über TCP-Verbindung
Dialog über TCP-Verbindung
Hi,
ich bin dabei mir ein kleines Toolset zu schreiben, was über tcp kommunizieren soll und nur in bash ist.
Als Ansatz hatte ich für den clienten den /dev/tcp-trick der bei debian ja nicht funktioniert im Auge. Ich habe gelesen, netcat kann das gleiche.
wie bekomme ich netcat dazu, einen Dialog mit dem Server zu führen? Man müsste das doch eigendlich genau wie /dev/tcp auf z.b. "Kanal" 3 umleiten können und dann damit den dielog führen oder?
Gruss,
AK-Palme
ich bin dabei mir ein kleines Toolset zu schreiben, was über tcp kommunizieren soll und nur in bash ist.
Als Ansatz hatte ich für den clienten den /dev/tcp-trick der bei debian ja nicht funktioniert im Auge. Ich habe gelesen, netcat kann das gleiche.
wie bekomme ich netcat dazu, einen Dialog mit dem Server zu führen? Man müsste das doch eigendlich genau wie /dev/tcp auf z.b. "Kanal" 3 umleiten können und dann damit den dielog führen oder?
Gruss,
AK-Palme
Die Umleitung funktioniert bei netcat genauso, wie sonst auch
Was verstehst du unter "Dialog mit dem Server führen" ?
vielleicht hilft ein Beispiel zum besseren Verständnis:
ein Mini-Shellscript für den Server-Teil:
und schon kanns losgehen:
Gruß
gms
Was verstehst du unter "Dialog mit dem Server führen" ?
vielleicht hilft ein Beispiel zum besseren Verständnis:
ein Mini-Shellscript für den Server-Teil:
Code: Alles auswählen
root@gms4:~# cat server.sh
#!/bin/bash
while read line; do
echo "server echo: $line"
done
root@gms4:~#
Code: Alles auswählen
root@gms4:~# nc -l -p 10000 -e ./server.sh &
[1] 11327
root@gms4:~# exec 4> client.txt
root@gms4:~# exec 3> >(nc localhost 10000 >&4;)
root@gms4:~# echo "hallo server" >&3
root@gms4:~# echo "blabla" >&3
root@gms4:~# exec 3>&-
root@gms4:~# exec 4>&-
root@gms4:~#
root@gms4:~# cat client.txt
server echo: hallo server
server echo: blabla
root@gms4:~#
gms
Hi gms,
erstmal danke für dein Codestück. Mit Dialog meinte ich, dass z.b. der Server etwas schickt, der Client verarbeitet die Zeile und antwortet entsprechend, etc.
Im Grunde passt dein code da ja schon ganz gut. Gibt es aber den Weg, keine externe Datei zu benutzen?
so dass ich mit z.b. read aus dem Kanal direkt lesen kann?
Danke,
AK-Palme
erstmal danke für dein Codestück. Mit Dialog meinte ich, dass z.b. der Server etwas schickt, der Client verarbeitet die Zeile und antwortet entsprechend, etc.
Im Grunde passt dein code da ja schon ganz gut. Gibt es aber den Weg, keine externe Datei zu benutzen?
so dass ich mit z.b. read aus dem Kanal direkt lesen kann?
Danke,
AK-Palme
Ich würde gerne dieses gerne mit netcat machen: http://thesmithfam.org/blog/?p=21
Also alles intern ohne Dateien. Allerdings bastel ich jetzt schon mehrere Stunden daran rum, aber wenn ich lesen kann, kann ich nicht schreiben und andersrum
Jemand eine Idee dazu?
Also alles intern ohne Dateien. Allerdings bastel ich jetzt schon mehrere Stunden daran rum, aber wenn ich lesen kann, kann ich nicht schreiben und andersrum
Jemand eine Idee dazu?
also ohne Dateien:AK-Palme hat geschrieben:Ich würde gerne dieses gerne mit netcat machen: http://thesmithfam.org/blog/?p=21
Also alles intern ohne Dateien.
Code: Alles auswählen
gms1 ~ # exec 4</dev/tty99
gms1 ~ # exec 3> >(nc www.google.at 80 >&4;)
gms1 ~ # echo -e "GET / HTTP/1.1\n\n">&3
gms1 ~ # cat <&4
HTTP/1.1 302 Found
Location: http://www.google.at/
Cache-Control: private
Set-Cookie: PREF=ID=cd8e9078d1c32d42:TM=1186601737:LM=1186601737:S=ip48NxUTPidcUvUM; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html
Server: GWS/2.1
Content-Length: 218
Date: Wed, 08 Aug 2007 19:35:37 GMT
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.at/">here</A>.
</BODY></HTML>
gms1 ~ # exec 3>&-
gms1 ~ # exec 4>&-
das steht aber im Widerspruch zu obigem Beispiel, wir sind uns also noch nicht einig, was du unter einem Dialog verstehstAK-Palme hat geschrieben: Mit Dialog meinte ich, dass z.b. der Server etwas schickt, der Client verarbeitet die Zeile und antwortet entsprechend, etc
Gruß
gms
sorry, der Grund ist mir jetzt klar, bei mir hats das tty99 anscheinend auch nicht gegeben, daher hat das Kommando eine neue Datei /dev/tty99 angelegt, mit einem korrekten tty geht bei mir so auch nicht.
muß nochmals überlegen ...
edit: ist das eine annehmbare Lösung ?
Gruß
gms
muß nochmals überlegen ...
edit: ist das eine annehmbare Lösung ?
Code: Alles auswählen
gms1 gms # echo -e "GET / HTTP/1.1\n\n" | nc www.google.at 80
HTTP/1.1 302 Found
Location: http://www.google.at/
Cache-Control: private
Set-Cookie: PREF=ID=5924c44ca73af5b5:TM=1186634767:LM=1186634767:S=XD0rJ9F7-LQLlf4e; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html
Server: GWS/2.1
Content-Length: 218
Date: Thu, 09 Aug 2007 04:46:07 GMT
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.at/">here</A>.
</BODY></HTML>
gms
und warum ist das mit dieser Lösung nicht möglich ?AK-Palme hat geschrieben:Hi,
leider nicht, weil Server und Client wechselseitig mehrmals was sagen müssen :/
zur Verdeutlichung: nach diessen beiden Kommandos: hat sowohl der Client als auch der Server "mehrmals etwas gesagt":
Code: Alles auswählen
gms1 gms # echo -e "GET / HTTP/1.1\n\n" | nc www.google.at 80 >/dev/null
gms1 gms # echo -e "GET / HTTP/1.1\n\n" | nc www.google.at 80 >/dev/null
gms
Das Protokoll ist in etwa so:
Halt alles in einer Verbindung
Code: Alles auswählen
Server: Willkommen, sag dass du das Protokoll verstehst, und wo du grad dabei bist, authentifiziere dich
Client: Moin, hier meine Zutrittskarte
Server: Okay, ist in Ordnung. Was willst du von mir?
Client: Mach mal ein Backup
Server: Okay, Backup ist fertig. Das Ergebnis ist in Ordnung. Ciao