Dialog über TCP-Verbindung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
AK-Palme
Beiträge: 411
Registriert: 25.05.2004 15:38:30
Kontaktdaten:

Dialog über TCP-Verbindung

Beitrag von AK-Palme » 07.08.2007 07:23:34

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

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 07.08.2007 11:37:24

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:

Code: Alles auswählen

root@gms4:~# cat server.sh
#!/bin/bash
while read line; do
   echo "server echo: $line"
done
root@gms4:~#
und schon kanns losgehen:

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:~#
Gruß
gms

Benutzeravatar
AK-Palme
Beiträge: 411
Registriert: 25.05.2004 15:38:30
Kontaktdaten:

Beitrag von AK-Palme » 07.08.2007 13:46:53

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

Benutzeravatar
AK-Palme
Beiträge: 411
Registriert: 25.05.2004 15:38:30
Kontaktdaten:

Beitrag von AK-Palme » 08.08.2007 17:40:24

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?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.08.2007 21:44:03

AK-Palme hat geschrieben:Ich würde gerne dieses gerne mit netcat machen: http://thesmithfam.org/blog/?p=21
Also alles intern ohne Dateien.
also 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>&-
Bei diesem Beispiel schickt der Client einen Request an den Server und der Server antwortet

AK-Palme hat geschrieben: Mit Dialog meinte ich, dass z.b. der Server etwas schickt, der Client verarbeitet die Zeile und antwortet entsprechend, etc
das steht aber im Widerspruch zu obigem Beispiel, wir sind uns also noch nicht einig, was du unter einem Dialog verstehst

Gruß
gms

Benutzeravatar
AK-Palme
Beiträge: 411
Registriert: 25.05.2004 15:38:30
Kontaktdaten:

Beitrag von AK-Palme » 08.08.2007 23:07:00

Hi,
aus irgendwelchen Gründen klappt das Beispiel bei mir nicht.. Ich habe zwar kein tty99, aber es wird sicher auch mit 50 gehen ;)

bis zu dem cat funktioniert alles. nur es liegen wohl keine Daten an.. Ich probier es nochmal weiter..

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.08.2007 23:17:26

:oops: 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 ?

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>
Gruß
gms

Benutzeravatar
AK-Palme
Beiträge: 411
Registriert: 25.05.2004 15:38:30
Kontaktdaten:

Beitrag von AK-Palme » 10.08.2007 13:28:01

Hi,
leider nicht, weil Server und Client wechselseitig mehrmals was sagen müssen :/

Gruss,
AK-Palme

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 10.08.2007 21:11:26

AK-Palme hat geschrieben:Hi,
leider nicht, weil Server und Client wechselseitig mehrmals was sagen müssen :/
und warum ist das mit dieser Lösung nicht möglich ?

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
Gruß
gms

Benutzeravatar
AK-Palme
Beiträge: 411
Registriert: 25.05.2004 15:38:30
Kontaktdaten:

Beitrag von AK-Palme » 11.08.2007 16:09:37

Das Protokoll ist in etwa so:

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
Halt alles in einer Verbindung

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 11.08.2007 19:33:17

dafür würde ich statt einem Shell-Script eher Perl einsetzen, andere werden dir vielleicht Python oder sonstwas empfehlen.
Wenn Perl ( C,C++ oder Java) eine Option für dich ist, könnte ich dir dabei helfen und dir das Grundgerüst für dieses Script posten.

Gruß
gms

Benutzeravatar
AK-Palme
Beiträge: 411
Registriert: 25.05.2004 15:38:30
Kontaktdaten:

Beitrag von AK-Palme » 11.08.2007 21:50:06

Hi,
ich wollte eigendlich Hoch- und Höhere Sprachen vermeiden. Auch aus eine Art versuch das mit der Bash hinzubekommen und um mich in der bash fortzubilden

Antworten