2010-03-25 22 views
9

HI,Escribir un cliente telnet

tengo un dispositivo que expone una interfaz telnet que se puede acceder a usar un nombre de usuario y contraseña y luego manipular el funcionamiento del dispositivo.

Tengo que escribir un programa C que oculta el aspecto de telnet del cliente y, en su lugar, proporciona una interfaz para que el usuario controle el dispositivo.

¿Cuál sería una buena manera de proceder. Intenté escribir un programa de socket simple pero se detiene en el prompt de inicio de sesión. Supongo que no estoy siguiendo el protocolo TCP.

¿Alguien ha intentado esto, hay una biblioteca de código abierto para hacer esto?

Gracias

Adición: Finalmente Deseo exponerlo a través de una API web/servicio web. La plataforma es Linux.

+0

¿Se ejecutará este programa en Windows? Linux? Si tiene Windows, puede usar winsock. En Linux seguramente podrías usar algo equivalente. – Nate

+0

Pregunta relacionada: "Usar telnet en un programa C" http://stackoverflow.com/questions/202859/using-telnet-in-a-c-program – jfs

Respuesta

10

Si Python es una opción, puede usar telnetlib.

Code example:

#!/usr/bin/env python 
import getpass 
import sys 
import telnetlib 

HOST = "localhost" 
user = raw_input("Enter your remote account: ") 
password = getpass.getpass() 

tn = telnetlib.Telnet(HOST) 

tn.read_until("login: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

tn.write("ls\n") 
tn.write("exit\n") 

print tn.read_all() 
+2

Por el momento, esta parece ser la forma más conveniente de avanzar. ¡Me cansé de un guión rápido al leer la documentación en línea y funciona! ¡Ahora todo lo que tengo que hacer es aprender Python, que no parece tan difícil! ¿Me pregunto si puedo comunicarme entre python y otros programas de C quizás? – MAC

2

This podría ser una lectura útil para usted.

+0

¡Gracias también fue útil! – MAC

2

Descargar Putty código fuente. Examine TELNET.C, el backend de Telnet para Putty.

+10

Estudiar la masilla sería como leer las especificaciones técnicas de un motor de combustión interna en un esfuerzo por comprender cómo conducir. Lo que MAC necesita es un ejemplo simple de sockets y el protocolo Telnet. –

+1

Preferiría decir que Putty es EL ** cliente de ** SSH ** para Windows **. –

4

El protocolo de telnet es bastante sencillo ... solo crea una conexión TCP y envía y recibe datos ASCII. Eso es practicamente todo.

Así que lo único que tiene que hacer es crear un programa que se conecta a través de TCP, a continuación, lee los caracteres de la toma de TCP y lo procesa para actualizar la interfaz gráfica de usuario y/o escribe caracteres a la toma en respuesta al usuario manipular los controles en la GUI.

Cómo implementar eso depende mucho del software que está utilizando para construir su interfaz. En el lado del TCP, un simple evento de bucle alrededor de select() sería suficiente.

+0

Es cierto, lo intenté pero estaba teniendo problemas. Así que esperaba encontrar una biblioteca preconstruida. – MAC

+0

mal, el protocolo telnet real es mucho más complicado (tipo de terminal, negociación de opciones, etc ... ver [RFC 854] (http://www.rfc-editor.org/rfc/rfc854.txt)). pero la gran mayoría de los clientes de telnet mal implementados son simples conectores ASCII. –

+0

Buen punto; Sin embargo, no creo que MAC necesite preocuparse por esas arrugas para su propósito. –

1

menos que la aplicación es trivial, un mejor punto de partida sería averiguar cómo se va a crear la interfaz gráfica de usuario. Esta es una pregunta más importante y tendrá un mayor impacto en su proyecto que la forma exacta en que telnet ingresa al dispositivo. Mencionas C al principio, pero luego comienzas a hablar de Python, lo que me hace pensar que eres relativamente flexible en el asunto.

Una vez que esté configurado en un idioma/plataforma, busque una biblioteca de telnet; debe encontrar algo razonable ya implementado.

+0

¡Esa es una evaluación razonable! La aplicación debe tener dos partes, una es un servidor central que realmente hará todo el control y una aplicación de interfaz de usuario basada en iPhone que los usuarios utilizarán para realizar cambios. Personalmente, tengo experiencia con las tecnologías de Microsoft, pero tengo que hacer esto usando tecnologías gratuitas/de código abierto. Por lo tanto, estoy en una especie de pérdida en cuanto a dónde comenzar. Necesito exponer esta API de manera que pueda ser consumida por una aplicación de iphone. En mi opinión, eso es algo así como un servicio web. Todavía no estoy seguro de cómo hago para hacer uno sin .net =) – MAC

3

Mientras que telnet es casi un socket conectado a un terminal, no es del todo cierto. Creo que puede haber algunos caracteres de control que se pasan poco después de que se establece la conexión. Si su dispositivo está enviando algunos datos de control inesperados, puede confundir su programa. Si aún no lo has hecho, ve descarga wireshark (o tshark o tcpdump) y supervisa tu conexión. Wireshark (anteriormente etéreo) es multiplataforma y bastante fácil de usar para cosas simples. Filtrar con tcp.puerto == 23

0

Compruebe el código fuente here. Me ha ayudado mucho en la comprensión del protocolo Telnet.

0

Vea las opciones en su cliente de telnet: en un socket de escucha arbitrario y pulse escape] para ingresar al cliente.

telnet> help 
telnet> set ? 
Cuestiones relacionadas