PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Große Frage zum Telnet Protokoll



7.e.Q
13-05-2005, 08:32
Hi Leute,

ich hab inzwischen herausgefunden, daß ich anscheinend den Client auf meiner Fernwartungs-Konsole per Telnet-Protokoll so steuern kann, daß er wie gewünscht die Zeichen einzeln überträgt. Jetzt die Frage an die Leute, die Ahnung vom Telnet Protokoll haben, bzw. die die entsprechenden RFCs verstanden haben. Ich möchte, daß mein Programm dem Client (Putty o.ä.) mitteilt, daß (aus Sicht des Clients, also Lokal = Client)

- der Server (mein Programm) echot (also lokales Echo im Client deaktivieren)
- der Client die Zeichen bitte sofort einzeln übertragen soll (also KEIN LineMode)

Das sind bis jetzt die einzigen Wünsche, die ich habe. Was muss ich dazu machen? Welche Steuerzeichen muss der Server an den Client und der Client dazu an den Server schicken?

Der Quellcode von telnetd ist mir zu kryptisch, um es darüber herauszufinden.

Danke

Gruß,
Hendrik

Joghurt
13-05-2005, 13:45
Soweit ich die RFCs verstehe, musst du
IAC DO SUPPRESS-GOAHEAD (Bytefolge 255 253 3)
und
IAC WILL ECHO (Bytefolge 255 251 1)
senden. Sollte mal ein byte mit Wert 255 gesendet werden müssen, musst du es doppeln.
Der client wird dementsprechend mit
IAC WILL SUPPRESS-GOAHEAD (255 251 3) und
IAC DO ECHO (255 253 1) antworten. Sollte er mal ein 255 senden müssen, wird er es auch doppeln.

Probleme bekommst du natürlich, wenn der Client 255 252 1 (WON'T SUPPRESS-GOAHEAD) oder 255 254 3 (DON'T ECHO) antwortet. In dem Fall einfach dem aufmüpfigen Pack die Verbindung kappen :D

Joghurt
16-05-2005, 19:54
Rein interessehalber: funktioniert es so?

7.e.Q
17-05-2005, 08:37
Guten Morgen,

bin gerade eben erst dazu gekommen, deinen Post zu lesen. Sorry.

Danke, werd das mal eben ausprobieren so. Gebe dir bescheid!

Edit: Ui, muss mein Programm erstmal wieder ans Laufen bekommen... *gnnn*

7.e.Q
17-05-2005, 09:28
Also scheint zu funktionieren. Ich muss jetzt noch wissen, wie ich das Pseudo Terminal konfigurieren muss (tcsetattr, termios etc.), damit das mit readline vernümpftig zusammen arbeitet.

Äh, was definitiv noch nicht funktioniert, ist die zeichenweise Übertragung. Es wird immer noch alles in einem Block erst dann gesandt, wenn ich ENTER drücke. :(

7.e.Q
17-05-2005, 13:08
Hmm... funktioniert definitiv nicht so, wie es soll. Die Initialisierung per Telnet Kommandos klappt. Ich erhalte auch die korrekten Responses vom Client. Aber ändern tut das irgendwie nix. WILL ECHO und DO SUPPRESS GO-AHEAD in Kombination sollte den Client ja eigentlich in den zeichenweisen Übertragungsmodus versetzen. Aber dem ist nicht so. Zumindest nicht bei mir.

Joghurt
17-05-2005, 13:29
Vielleicht liegt der Hund woanders begraben. Hast du mal mit einem Network-Sniffer geschaut, ob die Zeichen einzeln gesendet werden?

7.e.Q
17-05-2005, 13:31
Werden sie definitiv nicht. Erst nach dem Return. Trotz DO SUPPRESS-GO-AHEAD und WILL ECHO (und den entsprechenden Antworten darauf).

Merkwürdig finde ich nur, daß mir der Client ein weiteres WILL ECHO zuschickt. Muss ich darauf noch mit einem DONT ECHO antworten, damit er kapiert, was ich meine?

Argh moment... falscher Befehl... Protokoll folgt sofort... augenblick... ist in Arbeit... *gnnn*

So... also nix mit WILL ECHO sondern viel mehr DO SUPPRESS-GO-AHEAD... es sieht dann so aus, aus sicht meines Programms, also des Servers:



SENT: DO 0x03 SUPPRESS-GO-AHEAD
SENT: WILL 0x01 ECHO
RECV: WILL 0x1F ???
RECV: WILL 0x20 ???
RECV: WILL 0x18 ???
RECV: WILL 0x27 ???
RECV: DO 0x01 ECHO
RECV: WILL 0x03 SUPPRESS-GO-AHEAD
RECV: DO 0x03 SUPPRESS-GO-AHEAD

Joghurt
17-05-2005, 14:48
Dann sei doch so freundlich und sende ihm auch ein WILL SUPPRESS-GO-AHEAD, um ihm zu zeigen, dass auch du Zeichenweise überträgst. Evtl. geht es dann schon.

PS: Der Client will auch noch die Terminaldaten haben, ich denke, darin liegt auch der Hund begraben.

http://www.iana.org/assignments/telnet-options

Joghurt
17-05-2005, 16:40
Nochwas: die IAC Sequenzen müssen nicht immer 3 Zeichen lang sein, von 2 bis 5 ist alles vertreten. Insbesondere IAC AYT (Are You There) solltest du wohl implementieren.

Und wenn du ein dir unbekanntes DO bzw. WILL bekommst, solltest du mit einem entsprechenden WON'T bzw DON'T antworten, damit der Client weiss, dass du ihn nicht verstehst.

7.e.Q
17-05-2005, 22:46
Das WILL SUPPRESS-GO-AHEAD sende ich ihm schon.

Ich werd mir das morgen nochmal genau anschauen. Leider hab ich hier zuhause keinen Zugriff darauf.

Zwischendurch übrigens herzlichen Dank für deine Unterstützung. Hat mir bisher doch schon ganz gut weiter geholfen. Ich hoffe, das geht so bis zum gewünschten Erfolg weiter. :)

Gruß,
Hendrik

7.e.Q
19-05-2005, 06:23
So einfach geht das... also dieses Thema ist wohl abgehakt. Hab einfach nur nicht korrekt mit WILL SUPPRESS-GO-AHEAD auf das DO SUPPRESS-GO-AHEAD vom Client geantwortet. Ich dachte, es sei das erste von meinem Server versandte WILL SUPPRESS-GO-AHEAD gemeint... so kann man sich irren. :rolleyes:

Edit: wenn ich genauer darüber nachdenke... doch sehr merkwürdig, daß es jetzt funktioniert. Weil eigentlich hab ich ihm genau das WILL SUPPRESS-GO-AHEAD schon vorher geschickt... hmm... naja vielleicht an der falschen Stelle... :confused:

egal

jetzt gehts

Joghurt
19-05-2005, 10:12
Ja, seltsam. Bei meinem kleinen Test habe ich als allererstes das WILL SGA gesendet und es ging. Naja, solange es nun geht, ist ja alles in Butter.