2011-01-19 14 views
6

Entiendo que Telnet es un protocolo tanto como HTTP. Tengo esta noción de que después de que se haya realizado la conexión TCP inicial, el cliente Telnet enviaría algún código específico de telnet al servidor en el otro lado, en este caso un servidor HTTP. Pero dado que el servidor HTTP no comprende los códigos específicos de Telnet, debería arrojar un error o cancelar la conexión, etc. Pero en realidad podemos hacer telnet a un servidor HTTP y buscar páginas si ingresamos los encabezados HTTP correctos y los enviamos. ¿Cómo puede ser así? La entrada de Wikipedia realmente no me ayudó a entender este punto específico. (http://en.wikipedia.org/wiki/Telnet#Telnet_data)Cómo los servidores HTTP aceptan Telnet

Respuesta

4

Tiene razón al decir que telnet es su propio protocolo, que se describe en un par de RFC. Puede echar un vistazo al wikipedia para ver cuáles exactamente y algunos otros recursos que explican el protocolo.

Básicamente funciona así: cuando utiliza telnet para conectarse a un servidor, muestra todos los caracteres imprimibles que le envía el servidor. Y todo lo que escriba se enviará de vuelta al servidor. Así es como puede recuperar páginas web cuando se conecta a un servidor web: envía un comando que un servidor http acepta y obtiene el resultado correcto.

Ahora, hay algunas opciones específicas de telnet. IIRC, no los enviará al servidor a menos que el servidor los envíe primero. Esas opciones se usan para habilitar/deshabilitar el eco local (piense en las contraseñas, no las quiere visibles al iniciar sesión), negocie el tamaño del terminal, negocie el tipo de fin de línea. Esos son comandos que tienen algunos bytes de longitud y comienzan con el byte 255 (llamado IAC, interpretar como comando). Cuando se conecta a un servidor telnet, su cliente los interpretará y responderá en consecuencia, todo automáticamente en segundo plano, sin mostrarle esos comandos.

Aunque no es específico de telnet, un servidor telnet también puede enviar ANSI escape sequences. Se utilizan para colores, negrita, posicionamiento del cursor, ... Un cliente de telnet también los interpretará (o simplemente los pasará al emulador de terminal que está utilizando, como xterm).

Si quieres algo "de bajo nivel" de telnet, que no interpretará las opciones de Telnet y, de hecho mostrar lo que se obtiene, es posible que desee echar un vistazo a netcat

0

Puede consultar un servidor http usando telnet, a menudo lo hago como una prueba rápida y desagradable telnet no envía ningún código. sólo hace la conexión, pero hay códigos específicos de telnet se puede enviar si necesita

hacer esto ...

telnet server.com 80 
GET http/1.0 /^m 
host: server.com^m 
^m 

... servers response 

^m = tecla enter

he hecho esto se hace en Linux en Windows puede ser diferente.

DC

+0

bien si he entendido bien solo cliente Telnet crea una conexión de socket y espera a que el servidor envíe algo específico de Telnet. Si el servidor envía algo, reaccionará con códigos específicos para negociar cosas de NVT. Si no, se quedará allí hasta que el usuario escriba algo para retransmitirlo al servidor. – chamibuddhika

+0

Según tengo entendido, depende de cómo inicie telnet. si lo inicias con un host y un puerto opcional como he hecho anteriormente, se conecta directamente al host y espera los comandos (lo que escribes) si lo inicias sin un host, pasa al modo de comando. eche un vistazo aquí http://linux.about.com/od/commands/l/blcmdl1_telnet.htm y para Windows aquí http://technet.microsoft.com/en-us/library/c.aspx No he podido para obtener el ejemplo anterior para que funcione en Windows, entonces intentaré averiguar por qué no. – DeveloperChris

+0

linux.about.com/od/commands/l/blcmdl1_telnet.htm resolvió mi problema. Depende de cómo inicie el cliente Telnet como lo mencionó, aunque encontré que el cliente Linux no tiene ese interruptor en particular. – chamibuddhika

3

Telnet es sólo una manera interactiva fácil de abrir una conexión TCP a un socket de escucha. Debido a que el cliente de telnet envía ciegamente lo que escribe a ese socket, teóricamente puede emular cualquier otro protocolo sobre TCP. En realidad, el único límite es que los caracteres no imprimibles sean interpretados por el controlador del teclado.

HTTP no utiliza caracteres no imprimibles excepto para delimitar entre el encabezado HTTP y el cuerpo con dos "saltos de línea" consecutivos (es decir, una "línea en blanco").
Tenga en cuenta que no estoy hablando aquí de la etiqueta HTML del cuerpo, sino de la carga (por ejemplo, el cuerpo SOAP).

No hay magia aquí básicamente.

Veamos la dinámica de las cosas.
HTTP admite una serie de comandos como GET, POST, PUT, etc. ... Cada comando tiene su sintaxis y hay una respuesta asociada con una sintaxis acordada y códigos de error bien definidos. Cuando se conecta a un servidor HTTP utilizando telnet, abre la conexión de socket y el servidor crea un hilo para administrar el diálogo con su cliente. A continuación, puede imitar un navegador escribiendo el comando que el navegador enviaría. Cada vez que pulsa la tecla CR, el cliente envía la línea al servidor. Si un comando contiene varias líneas, puede ingresar varias líneas, cada una de ellas corresponde a una línea del encabezado del comando. Una vez que golpea dos CR en una fila (es decir, una línea vacía), el servidor considera que el encabezado del comando está completo y la respuesta se reúne y envía a su cliente. Debido a que el objetivo de la vida de un cliente de telnet es hacer eco de los caracteres recibidos (a menos que se indique lo contrario), entonces puede ver el encabezado y el cuerpo de la respuesta en la ventana de su terminal. Telnet se detiene allí. Un navegador representaría el HTML (si la respuesta es una página HTML).
Espero que lo aclare todo.

Cuestiones relacionadas