Controlar el diseño del texto en una conexión telnet
Publicado: 22 Nov 2011, 08:33
Hola
Estoy haciendo un servidor, al que se conecten los usuarios vía telnet, con el cliente telnet que quieran.
Siguiendo lo que os preguntaba en este hilo:
http://www.emesn.com/autoitforum/viewto ... nsi#p11382
Quiero controlar el diseño del texto que el servidor le envía al cliente, para poder poner colores, tabulaciones, controlar la paginación, etc.
He capturado lo que envían algunos servidores a los que uno se conecta vía telnet (como aún frecuento alguno, se me ocurrió así a voz de pronto un mud cualquiera) y vi, que enviaban el texto en carácteres ascii, algunos en decimal y otros en hexadecimal, con algún código raro por medio. Como por ejemplo al principio de cada línea algo como:
No se para qué enviarán eso... La cuestión, es, que evidentemente, el cliente telnet que sea (el de Windows mismo) lo interpreta y muestra correctamente. Imprime en pantalla los carácteres imprimibles, y los que no lo sean los procesa...
Pero, al intentar hacer yo lo mismo pues como que es un desastre.
Si envío algo como:
es exactamente lo que se ve en el cliente. Da lo mismo que lo mande en decimal que en hexadecimal...
Pero, curiosamente, si lo envío así:
el cliente lo muestra correctamente, y si son carácteres no imprimibles los procesa bien.
Ahora bien, si envío:
también se ve correctamente en el cliente. Pero, si enviara:
se vería en el cliente "09 Hola mundo".
Pasa lo mismo con las secuencias ansi, no hay forma de que las interprete un cliente telnet.
Si por ejemplo enviara:
que limpia la pantalla, en el cliente telnet se vería ".[2J". Y no limpia la pantalla. Y así con cualquier secuencia ansi.
He leído Googleando (entre la muy poca info que he visto sobre esto, porque en todas las páginas sale lo mismo) que debe ser una negociación telnet que debería hacer el servidor con el cliente, para emular un terminal que soportara todo esto. No es que lo haya leído directamente, pero lo he deducido :).
Parece que la conexión básica en telnet es en modo nvt, pero debe ser que el nvt no soporta ansi ni nada de esto, y hay que emular algo como vt100 o vt52, que no he visto como negociar el uso de ninguna de las dos, ni de ningún otro terminal de estos que soporte ansi ni lo que pretendo hacer.
La idea es, poder enviar cadenas al cliente, como por ejemplo:
y que el cliente lo interprete bien, porque no creo que sea plan de enviar carácter por carácter ¿no? :).
Almenos, creo que los servidores que he sniffeado lo hacen así, quizá esté equivocado; pero lo que se ve en el programa con el que capturo el tráfico entre el servidor y el cliente son carácteres separados por espacios, no por saltos de línea.
A ver si alguien tiene idea de esto y sabe decirme como he de hacerlo, porque llevo ya días dándole vueltas y no hay manera :P.
Salu2!
Estoy haciendo un servidor, al que se conecten los usuarios vía telnet, con el cliente telnet que quieran.
Siguiendo lo que os preguntaba en este hilo:
http://www.emesn.com/autoitforum/viewto ... nsi#p11382
Quiero controlar el diseño del texto que el servidor le envía al cliente, para poder poner colores, tabulaciones, controlar la paginación, etc.
He capturado lo que envían algunos servidores a los que uno se conecta vía telnet (como aún frecuento alguno, se me ocurrió así a voz de pronto un mud cualquiera) y vi, que enviaban el texto en carácteres ascii, algunos en decimal y otros en hexadecimal, con algún código raro por medio. Como por ejemplo al principio de cada línea algo como:
Código: Seleccionar todo
00000000
00000010
00000020
Pero, al intentar hacer yo lo mismo pues como que es un desastre.
Si envío algo como:
Código: Seleccionar todo
61 62 63 64 65
Pero, curiosamente, si lo envío así:
Código: Seleccionar todo
61
62
63
64
65
Ahora bien, si envío:
Código: Seleccionar todo
"Hola mundo"
Código: Seleccionar todo
09&" Hola mundo"
Pasa lo mismo con las secuencias ansi, no hay forma de que las interprete un cliente telnet.
Si por ejemplo enviara:
Código: Seleccionar todo
.[2J
He leído Googleando (entre la muy poca info que he visto sobre esto, porque en todas las páginas sale lo mismo) que debe ser una negociación telnet que debería hacer el servidor con el cliente, para emular un terminal que soportara todo esto. No es que lo haya leído directamente, pero lo he deducido :).
Parece que la conexión básica en telnet es en modo nvt, pero debe ser que el nvt no soporta ansi ni nada de esto, y hay que emular algo como vt100 o vt52, que no he visto como negociar el uso de ninguna de las dos, ni de ningún otro terminal de estos que soporte ansi ni lo que pretendo hacer.
La idea es, poder enviar cadenas al cliente, como por ejemplo:
Código: Seleccionar todo
09&" "&09&" Hola mundo."
Almenos, creo que los servidores que he sniffeado lo hacen así, quizá esté equivocado; pero lo que se ve en el programa con el que capturo el tráfico entre el servidor y el cliente son carácteres separados por espacios, no por saltos de línea.
A ver si alguien tiene idea de esto y sabe decirme como he de hacerlo, porque llevo ya días dándole vueltas y no hay manera :P.
Salu2!