Ir al contenido


Foto

Telnet y envío de comandos


  • Por favor identifícate para responder
2 respuestas en este tema

#1 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 27 abril 2018 - 04:46

Estimados, he decidido aumentar mas mi sistema en cuanto a procesos, para esto manualmente me conecto en una terminal via Telnet para ejecutar unos comando para dar de alta a equipos, en la aplicación que hice, genero los códigos necesarios para que cuando me conecte via telnet a ese equipo solo copie de la aplicación esos códigos y los pegue en la terminal de telnet. Pero dije, bueno por que no hacerlo desde la aplicación mejor .. y me puse a investigar ... estoy en pruebas ...

 

Encontré este ejemplo muy bueno ... 

http://delphiallimit...-de-telnet.html

 

Puedo con ese ejemplo conectarme perfectamente .. pero todo lo hago manual nuevamente pues seria una terminal propia... lo que busco es que una vez que me conecte a la terminal via telnet pueda enviar comandos a ese equipo via telnet ...

 

Al conectarme por ese emplo me pide en el servidor donde me conecto la clave y contraseña ... puse 2 Edit1 (el usuario) y Edit2 (contraseña) ... o que ahora intento es tratar de que esos datos sean enviados vía telnet desde la aplicación para poder estar logeado..

 

Para conectarme tengo esto ..


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. Telnet.Host := IPServidor.Text;
  4. Telnet.Port := StrToInt( Puerto.Text );
  5. Telnet.Connect;
  6. Log.SetFocus;
  7. end;

En el evento OnConnect:


delphi
  1. procedure TForm1.TelnetConnect(Sender: TObject);
  2. begin
  3. Log.Lines.Add( 'Conectando con ' + Telnet.Host + '.' );
  4. Log.Lines.Add( '' );
  5. Telnet.WriteLn(Trim(Edit1.Text)+#13);
  6. Telnet.WriteLn(Trim(Edit2.Text)+#13);
  7. end;

y Aqui es donde envío los datos hacia la terminal ... pero veo que cuando lo hago de esta forma me toma solo el edit2 (clave) y deberia poner primero el usuario (edit) y después la contraseña ..

 

Alguna idea de que puede ser o que otra solución podria darse ? ..

 

Uso Delphi7 (si todavía)...


  • 0

#2 Koalasoft

Koalasoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 142 mensajes
  • LocationMéxico

Escrito 28 abril 2018 - 02:35

Me respondo ...

 

Mi problema radicaba en que al envia datos a la terminal era demaciado rápido y solo ejecutab el ultimo comando enviado, ais que decidí utilizar el sleep para darle oportunidad de poder conectarme ...


delphi
  1. procedure TForm1.BtnConectarClick(Sender: TObject);
  2. begin
  3. Telnet.Host := IPServidor.Text;
  4. Telnet.Port := StrToInt( Puerto.Text );
  5. try
  6. Telnet.Connect;
  7. log.Lines.Add('Intentando conexión...');
  8. log.Lines.Add('');
  9. except
  10. ShowMessage('No se pudo realizar la conexión..');
  11. Exit;
  12. end;
  13. end;

y una vez conectado envío los los datos de unicio (usuario y contraseña) seguido de los comando que requiero...

 

Evento OnConnect del componente TidTelnet


delphi
  1. if Telnet.Connected then
  2. begin
  3. log.Lines.Add('Conectado...') ;
  4. log.Lines.Add('') ;
  5. Sleep(1000);
  6. Telnet.WriteLn('root');
  7. Sleep(1000);
  8. Telnet.WriteLn('admin');
  9. Sleep(1000);
  10. Telnet.WriteLn('enable');
  11. Sleep(1000);
  12. Telnet.WriteLn('config');
  13. Sleep(1000);
  14. end
  15. else
  16. begin
  17. log.Lines.Add('Error en la Conección...') ;
  18. log.Lines.Add('') ;
  19. end;

Requerido para que el cursor en la terminal se posicione en la ultima linea de la ultima columna para que este preparado para nuevos comando.. 

 

Evento OnDataAvailable del componente TIdTelnet


delphi
  1. procedure TForm1.TelnetDataAvailable(Sender: TIdTelnet;
  2. const Buffer: String);
  3. {This routine comes directly from the ICS TNDEMO code. Thanks to
  4. Francois Piette
  5. It updates the memo control when we get data}
  6. const
  7. CR = #13;
  8. LF = #10;
  9. var
  10. Start, Stop : Integer;
  11. begin
  12. if Log.Lines.Count = 0 then
  13. Log.Lines.Add('');
  14.  
  15. Start := 1;
  16. Stop := Pos(CR, Buffer);
  17. if Stop = 0 then
  18. Stop := Length(Buffer) + 1;
  19. while Start <= Length(Buffer) do
  20. begin
  21. Log.Lines.Strings[Log.Lines.Count - 1] :=
  22. Log.Lines.Strings[Log.Lines.Count - 1] +
  23. Copy(Buffer, Start, Stop - Start);
  24. if Buffer[Stop] = CR then
  25. begin
  26. Log.Lines.Add('');
  27. {$IFNDEF Linux}
  28. SendMessage(Log.Handle, WM_KEYDOWN, VK_UP, 1);
  29. {$ENDIF}
  30. end;
  31. Start := Stop + 1;
  32. if Start > Length(Buffer) then
  33. Break;
  34. if Buffer[Start] = LF then
  35. Start := Start + 1;
  36. Stop := Start;
  37. while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
  38. Stop := Stop + 1;
  39. end;
  40. end;

De alli en adelante ya podré usar desde la aplicación las configuraciones que requiero ... 

 

Saludos !! .. 

 


  • 1

#3 ELKurgan

ELKurgan

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 566 mensajes
  • LocationEspaña

Escrito 02 mayo 2018 - 11:59

Gracias por el aporte, se ve muy interesante

 

Saludos

 

(y) 


  • 0




IP.Board spam blocked by CleanTalk.