Written by: thempra on 03/07/2007 @ 08:00
Por necesidades de un nuevo proyecto, me he visto involucrado en la necesidad de establecer una conexion telnet, por lo que ya que nos ponemos a invetigar lo hacemos desde un Pocket PC, aunque el codigo que presento es independiente del dispositivo, incluso Mono.
Despues de revisar varias librerias tipo dotnettelnet, me decante por Minimalistic Telnet, basicamente por que se adaptaba mas a mis necesidades y se ve mucho mas claro lo que pretendemos hacer a nivel de aprendizaje.
Receta facil, facil, facil, utilizando dos simples funciones podremos trabajar contra nuestro servidor
Primero agregamos a nuestro proyecto el fichero Minimalistic Telnet, y creamos el par de funciones, la primera es meramente para establecer la conexion, siendo los pasos necesarios conectar, y autenticarse ( txtDebug es un componente TextBox para poder ver los resultados ):
private void ConectToServer (string ip, string login, string password, int port, int timeout)
{try
{txtDebug.Text += «Conectando con « + ip + «:» + port + «… «;
//Conectar al servidor telnet
tc = new TelnetConnection(ip, port);//Nos logueamos en el servidor
txtDebug.Text + = tc.Login(login, password, timeout);// Comprobamos el simbolo del prompt para asegurarnos logueo, «$» , «#» o «>», cada servidor nos pondra el que el desee
string prompt = s.TrimEnd();
txtDebug.Text += s;
prompt = s.Substring(prompt.Length – 1, 1);if (prompt != «$» && prompt != «>» && prompt != «#»)
//Podremos lanzar excepcion new Exception(«Connection failed») o bien mostrarlo por pantalla;
txtDebug.Text += «Connection failed»;if (tc.IsConnected)
{
txtDebug.Text = «Conectado !!»;
}
}
catch (Exception ex)
{
txtDebug.Text += «Error de conexion: « + ex.Message;
}}
Una vez conectados, ya podremos enviar directamente los comandos a ejecutar con otra sencilla funcion:
private string SendTelnetData(string prompt)
{// Si esta conectado …
if (tc.IsConnected)
{// enviamos el comando
tc.WriteLine(prompt);
prompt += tc.Read();}
else
{
lblStatus.Text = «Desconectado»;
}return prompt;
}
Con las llamadas a estas dos funciones tenemos todo solucionado, por ejemplo:
ConectToServer («192.168.1.1», «usuario», «contraseña», 23, 100);
SendTelnetData(«comando1»);
SendTelnetData(«comando2»);
No olvidemos que para desconectar solo nos seria necesario enviar la instruccion:
SendTelnetData(«exit»);
Quien se anima a hacer la version en SSH??
Catogories: .NET, Mono, Software Libre, ThoRo, Windows Mobile