Veränderte Daten in Telnet-Verbindung

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mit Telnetlib starte ich eine ANSI-Verbindung von einem XP-Rechner zu einem Programm auf einem Linux-Rechner. Dabei sollte u.a. folgende Seite aufgebaut werden:

Code: Alles auswählen

ABCDEFGHIJ      ABCDE@laptop1         13.05.06    14:17 Uhr
-------------------------------------------------------------------------------

                        S T A R T M E N Ü
                        =================

                      (1) Programm

                      (2) Sicherheitskopie Diskette
                      (3) ................ DVD

                      (4) Test der Dateien
                      (5) Dienstprogramme
                      (6) Verschiedenes

                      (7) Betriebssystem

                      (8) Terminal abmelden



                      Was soll ich tun?
-------------------------------------------------------------------------------
Es erscheint aber diese:

Code: Alles auswählen

ABCDEFGHIJ	ABCDE@laptop1		13.05.06    14:17 Uhr
-------------------------------------------------------------------------------

                        S T A R T M E N 
                        =================

                      (1) Programm

                      (2) Sicherheitskopie Diskette
                      (3) ................ DVD

                      (4) Test der Dateien
                      (5) Dienstprogramme
                      (6) Verschiedenes

                      (7) Betriebssystem

                      (8) Terminal abmelden
                                            

 

-------------------------------------------------------------------------------
Was soll ich tun? 
Wie könnte es kommen, dass die Frage 'Was soll ich tun?' unter die letzte Linie rutscht und somit nicht mehr sichtbar ist? Dass das Ü bei STARTMENÜ fehlt ist weniger störend, aber auffällig. rawq_getchar() in Telnetlib liefert schon dieselben Daten, so dass die Veränderung wohl im Socket geschieht. Das Telnet-Programm von Windows XP zeigt die Seite korrekt an. Kann es eventuell an nicht passenden Terminaltypen zwischen Client(XP) und Server(Linux) liegen? Es sind keine ESC-Sequenzen enthalten.
MfG
HWK
BlackJack

In Sockets werden keine Daten verändert. Dort werden einfach nur Bytes weitergereicht. Das 'Ü' deutet darauf hin, dass die Anwendung die Zeichen in einer anderen Kodierung ausgibt, als bei Dir in der Anzeige verwendet wird. Da musst Du entweder auf beiden Seiten die gleichen Einstellungen vornehmen, oder die Daten umwandeln.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Hallo, BlackJack!
So einfach ist es leider nicht. Es handelt sich nicht um die Darstellung meiner Anwendung, sondern die von telnetlib übermittelten Daten (Ich habe lediglich 'Ä's in '-' verändert zur besseren Lesbarkeit). Das Ü kommt also überhaupt nicht an. Was ich dargestellt habe, sind im Prinzip genau die Zeichen, die telnetlib.rawq_getchar() liefert. Die Veränderung muss also davor liegen. Falls socket dies nicht tut, dann muss scheinbar der Server die unterschiedlichen Ergebnisse bewirken.
Ich verstehe einfach nicht, weshalb 'Was soll ich tun? ' in unterschiedliche Zeilen gelangt. Warum zeigt das Telnet-Programm von XP ohne irgendwelche Einstellungen aber die Ausgabe korrekt an?
MfG
HWK
BlackJack

HWK hat geschrieben:Hallo, BlackJack!
So einfach ist es leider nicht. Es handelt sich nicht um die Darstellung meiner Anwendung, sondern die von telnetlib übermittelten Daten (Ich habe lediglich 'Ä's in '-' verändert zur besseren Lesbarkeit. Das Ü kommt also überhaupt nicht an. Was ich dargestellt habe, sind also im Prinzip genau die Zeichen, die telnetlib.rawq_getchar() liefert.
Sicher? Wie und wo gibst Du die Daten denn aus? Ist da wirklich nichts? Was ergibt `repr()` von den empfangenen Daten?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Natürlich gebe ich die Daten aus. Die ins Forum übermittelten Daten habe ich aber direkt nach Empfang mit telnetlib.read_eager() oder auch telnetlib.rawq_getchar() ohne irgendwelche Umwandlungen durch mein Script in eine Datei geschrieben.
MfG
HWK
BlackJack

Hast Du die Datei auch mal in einem Hexeditor angeschaut? Ist da an der Stelle des Ü wirklich gar nichts?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Nein. Da ist wirklich gar nichts: 24 * ' ' + 'S T A R T M E N \r\n'
BlackJack

Das ist eigenartig. Da habe ich keine Erklärung für, tut mir leid. :-(
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

BlackJack,
trotzdem danke für die Mühe. Könnte evtl. das Verhalten beim Einloggen mit der Art der Datenübertragung zusammenhängen?
Nach Eingabe des Benutzernamens (Kein Passwort nötig) erscheint folgendes:

Code: Alles auswählen

linux login: Last login: Sun Dec 24 10:54:12 from laptop1.local
Have a lot of fun...
tset: unknown terminal type network
Terminal type? ansi
unknown terminal "network"
unknown terminal "network"
Wobei ich durch das Script 'ansi' als Terminaltyp in Zeile 4 eingeben lasse. Danach wird die Problemseite übermittelt. Alle anderen Seiten, die im Gegensatz zu dieser auch Escape-Sequenzen enthalten, werden dann bestens dargestellt. Wie kommt es zu Terminaltyp 'network'? Meldet sich telnetlib so automatisch an?
MfG
HWK
Antworten