AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Mit TIdTelnet Kommandos auf einem UNIX-Rechner
Thema durchsuchen
Ansicht
Themen-Optionen

Mit TIdTelnet Kommandos auf einem UNIX-Rechner

Ein Thema von r_kerber · begonnen am 28. Jan 2004 · letzter Beitrag vom 30. Jan 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#1

Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 28. Jan 2004, 14:00
Hallo,

ich möchte/muß folgendes Problem lösen. Aus einem Delphi-Programm heraus soll auf einem UNIX-Rechner ein Shell-Kommando ausgeführt werden. Ich muß mich also anmelden mit User- und Kennwort-Eingabe. Offensichtlich ist aber das Programm zu schnell. Wenn ich diese Schritte einzeln anstoße funktioniert. Sobald aber die einzelnen Methodenaufrufe nacheinander stehen bleibt das Programm schon beim Senden des Login (mit WriteLn) hängen.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.607 Beiträge
 
#2

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 28. Jan 2004, 14:05
ich würde die Antworten vom server erwarten und auswerten.

Zuerst antwortet der Server mit 'Benutzername:' und dann mit 'Kennwort:'.
Ich würde also erst den nächsten Part senden, wenn eine Antwort zurückkam.

Das sind das bei dir übrigens ziemlich sicher andere Strings, ich hab an meiner Login-Shell ein wenig geändert
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 28. Jan 2004, 17:05
Das habe ich ja versucht. Aber offensichtlich sind die Methoden ReadLn und WriteLn dafür nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Marcel Gascoyne
Marcel Gascoyne

Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
 
Delphi 2005 Architect
 
#4

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 29. Jan 2004, 13:06
Hab gerade mal einen Test gemacht und es mit dem Event OnDataAvailabe hinbekommen. Hab mir hierfür ein paar Statusvariablen angelegt.

Getestet hab ich es mit AIX, evtl. musst Du die Strings noch anpassen.

Gruß,
Marcel

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdTelnet, StdCtrls;

type
  TForm1 = class(TForm)
    IdTelnet1: TIdTelnet;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure IdTelnet1DataAvailable(Sender: TIdTelnet;
      const Buffer: String);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure IdTelnet1Connected(Sender: TObject);
  private
    { Private-Deklarationen }
    FUserSent: Boolean;
    FPassSent: Boolean;
    FCmdSent: Boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.IdTelnet1Connected(Sender: TObject);
begin
  FUserSent := False;
  FPassSent := False;
  FCmdSent := False;
end;

procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet;
  const Buffer: String);
begin
  if (Pos('ogin:',Buffer) > 0) and not FUserSent then
  begin
    IdTelnet1.WriteLn('myusername');
    FUserSent := True;
  end;

  if (Pos('ssword:',Buffer) > 0) and not FPassSent then
  begin
    IdTelnet1.WriteLn('mypassword');
    FPassSent := True;
  end;

  if (Pos('user@machine /home/user>',Buffer) > 0) and not FCmdSent then
  begin
    IdTelnet1.WriteLn('ls -l');
    FCmdSent := True;
  end;

  Memo1.Lines.Add(Buffer);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdTelnet1.Connect;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  IdTelnet1.Disconnect;
  Close;
end;

end.
Marcel Gascoyne
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#5

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 29. Jan 2004, 16:26
Hallo Marcel,

ich habe jetzt leider ein Problem. Da der Telnet-Aufruf innerhalb einer Kommandozeilen-Anwendung laufen soll, wird des Telnet-Objekt schon zerstört, bevor die Kommandos fertig sind. Ich muß mir nun morgen überlegen, wie ich das abfange (irgendeine Warteschleife).
  Mit Zitat antworten Zitat
Benutzerbild von Marcel Gascoyne
Marcel Gascoyne

Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
 
Delphi 2005 Architect
 
#6

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 29. Jan 2004, 19:01
Warte doch im Event auf eine Meldung von Deinem Unix Kommando, dann wirds vorher nicht beendet.

Gruß,
Marcel
Marcel Gascoyne
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#7

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 29. Jan 2004, 19:29
Zitat von r_kerber:
Da der Telnet-Aufruf innerhalb einer Kommandozeilen-Anwendung laufen soll,
Hm? Hab ich was verpasst? Komponenten in einer Kommandozeilenanwendung? Wie hast du das denn hingekriegt? Funktioniert in Delphi 8 das Erstellen von Komponenten mit nil als Parent?
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#8

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 29. Jan 2004, 20:09
Hallo d3g,

bei dem Programm handelt es sich um eine Delphi 6-Anwendung. Und ich habe den unsauberen Trick gemacht, dass ich aus dem Hauptprogramm eine Form erzeuge. Ich weiß, das jetzt einigen OO-Profis die Haare zu Berge stehen.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#9

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 30. Jan 2004, 11:02
Zitat von r_kerber:
Und ich habe den unsauberen Trick gemacht, dass ich aus dem Hauptprogramm eine Form erzeuge.
Damit dürftest du aber Probleme bekommen, wenn das grafische Subsystem nicht geladen ist. Dann kann man dein Programm nicht starten.

Zitat von r_kerber:
Ich weiß, das jetzt einigen OO-Profis die Haare zu Berge stehen.
Nicht nur OO-Profis, auch mir
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#10

Re: Mit TIdTelnet Kommandos auf einem UNIX-Rechner

  Alt 30. Jan 2004, 11:27
Zitat von d3g:
Damit dürftest du aber Probleme bekommen, wenn das grafische Subsystem nicht geladen ist. Dann kann man dein Programm nicht starten.
Die brauche ich doch eigentlich nicht, da ich die Form nur erzeuge.
Zitat von d3g:
Zitat von r_kerber:
Ich weiß, das jetzt einigen OO-Profis die Haare zu Berge stehen.
Nicht nur OO-Profis, auch mir
Mir übrigens auch. Nur ist mir unter Zeitdruck keine bessere Lösung eingefallen. Ich bin für jeden Tip dankbar.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz