Entwickler-Ecke

Internet / Netzwerk - IdTelnet Passwortübergabe


realAndy - Mo 16.01.12 15:42
Titel: IdTelnet Passwortübergabe
Hi,

ich möchte micht mit der Indy Komponente IdTCPClient mit einem Server über Telnetverbindung verbinden. Hierzu muss ich ja den Loginnamen und das Passwort übertragen. Wie kann ich dies aber machen?
Wenn ich folgen Code ausführe, dann passiert erst eine weile nichts und dann kommt die Meldung Connection Closed Gracefully.
IdTCPClient1.IOHandler.ReadLn gibt gar nichts zurück.
Was macheich falsch, b.z.w. wie sende ich die Logindaten an den Server?



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
IdTCPClient1.Host := ...;
IdTCPClient1.Port := 23;
IdTCPClient1.Connect;
if not (IdTCPClient1.Connected) then
begin
    showmessage('es konnte keine Verbindung aufgebaut werden!');
    exit;
end;

IdTCPClient1.SendCmd('USER ' + 'username');
IdTCPClient1.SendCmd('PASS ' + 'password');
JvMemo1.Lines.Add(IdTCPClient1.IOHandler.ReadLn);



Danke für eure Hilfe
Andy

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


realAndy - Mo 16.01.12 17:03

ich habe jetzt versucht die Telnet Verbindung mit der Komponente IdTelnet herzustellen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
IdTelnet1.Host := '....';
IdTelnet1.Port := 23;
IdTelnet1.Connect;
IdTelnet1.SendCmd('username');
IdTelnet1.SendCmd('passwort');
...
Nach einiger Zeit kommt dann allerdings immer noch die Meldung "Connection Closed Gracefully".

Wie muss ich die Logindaten an den Server schicken und wie kann ich herausfinden ob das Login erfolgreich war?

Ich hoffe ihr könnt mir weiterhelfen :)

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


realAndy - Di 17.01.12 10:06

hmm, kann mir keiner Weiterhelfen?

Es muss doch möglich sein mit Delphi 2010 eine Telnet Verbindung aufzubauen bei welcher Loginname und PW übergeben werden müssen.
Nur wie kann ich die Logindaten übergeben?


Narses - Di 17.01.12 12:26

Moin!

Hm, wie man das mit D2010 und möglicherweise Indy10 macht, weiß ich nicht. :nixweiss:

Aber da bisher keiner was beizutragen hatte: ich habe mal in meinem QT-Archiv gewühlt, irgendwann hatte ich auch mal was mit der IdTelnet-Kompo zu tun, allerdings D7pro und Indy9... :?

Hier mal so im Groben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
type
  TConnectionTask = (
    ctDisconnect, // Verbindung trennen
    ctQuery       // Verbindungszustand abfragen
    );

  TMainForm = class(TForm)
    LC: TIdTelnet;
    edHost: TEdit;
    edPassword: TEdit;
    BtnQuery: TButton;
    BtnDisconnect: TButton;
    procedure LCDataAvailable(Sender: TIdTelnet; const Buffer: String);
    procedure LCConnected(Sender: TObject);
    procedure BtnQueryClick(Sender: TObject);
    procedure BtnDisconnectClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    FConnectionTask: TConnectionTask;
    FReceiveBuffer: String;
    procedure SetConnectionTask(const Value: TConnectionTask);
  public
    property ConnectionTask: TConnectionTask read FConnectionTask write SetConnectionTask;
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.LCConnected(Sender: TObject);
begin
  LC.WriteLn(edPassword.Text);
  case FConnectionTask of
    ctQuery:
      begin
        LC.WriteLn('dir /st/conn');
        LC.WriteLn('dir /st/wa/th');
      end;
    ctDisconnect:
      LC.WriteLn('do /o/m/d');
  end;
  LC.WriteLn('exit');
end;

procedure TMainForm.LCDataAvailable(Sender: TIdTelnet; const Buffer: String);
begin
  FReceiveBuffer := FReceiveBuffer +Buffer;
  if (NOT Sender.Connected) then
    if (FConnectionTask > ctDisconnect) then
      with TStringList.Create do try
        CommaText := UpperCase(FReceiveBuffer);
        while ( (Count > 0and (Strings[0] <> 'DSL-CH-1') ) do
          Delete(0);
        if (Count >= 6then begin
          edConTime.Text := Strings[5];
          Delete(0);
        end;
        while ( (Count > 0and (Strings[0] <> 'DSL-CH-1') ) do
          Delete(0);
        if (Count >= 4then
          edAvgRx.Text := Strings[3];
      finally
        Free;
      end;
end;

procedure TMainForm.SetConnectionTask(const Value: TConnectionTask);
begin
  FConnectionTask := Value;
  FReceiveBuffer := '';
  LC.Connect;
end;

procedure TMainForm.BtnQueryClick(Sender: TObject);
begin
  ConnectionTask := ctQuery;
end;

procedure TMainForm.BtnDisconnectClick(Sender: TObject);
begin
  ConnectionTask := ctDisconnect;
end;
Irgendwas habe ich damals mit meinem Router veranstaltet, frag mich nicht was... :hair: Hat aber geklappt. ;)

cu
Narses


realAndy - Mi 18.01.12 12:07

Danke für die Antwort :)
Aber irgend wie will das bei mir mit Indy10 nicht laufen.
Ich hab jetzt Overbyte ICS genommen und schon geht alles.

Mich würde trotzdem interessieren, wie man das ganze unter Delphi 2010 mit Indy10 hinbekommt.


Viele Grüße
Andy