1,594
社区成员




unit Unit1;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdTelnet, IdGlobal;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure IdTelnetDataAvailable(Sender: TIdTelnet; const Buffer: TIdBytes);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
IdTelnet: TIdTelnet;
StrList: TStringList;
procedure SendString(S: String);
procedure WaitForPrompt(Str: String);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StrList := TStringList.Create;
Button1.OnClick := Button1Click;
IdTelnet := TIdTelnet.Create(Self);
With IdTelnet do
begin
Host := '127.0.0.1';
Port := 23;
OnDataAvailable := IdTelnetDataAvailable;
Connect;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
StrList.Free;
end;
procedure TForm1.WaitForPrompt(Str: String);
begin
While (Memo1.Lines.Count = 0) or (Memo1.Lines[Memo1.Lines.Count-1] <> Str) do
begin
Sleep(100);
Application.ProcessMessages;
end;
end;
procedure TForm1.SendString(S: String);
var
I: Integer;
begin
for I := 1 to Length(S) do IdTelnet.SendCh(S[I]);
IdTelnet.SendCh(#13);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
WaitForPrompt('login:');
SendString('admin');
WaitForPrompt('password:');
SendString('admin');
WaitForPrompt('something:');
SendString('dis ver');
end;
procedure TForm1.IdTelnetDataAvailable(Sender: TIdTelnet; const Buffer: TIdBytes);
var
I, Count: Integer;
begin
Count := Memo1.Lines.Count;
StrList.Text := TEncoding.ANSI.GetString(Buffer);
for I := 0 to StrList.Count-1 do
begin
if (I = 0) and (Count <> 0) then
Memo1.Lines[Count-1] := Memo1.Lines[Count-1] + StrList[I]
else
Memo1.Lines.Add(StrList[I]);
end;
end;
end.
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, IdTelnet, IdGlobal;
type
TForm1 = class(TForm)
Memo1: TMemo;
ButtonUser: TButton;
ButtonPassword: TButton;
procedure IdTelnetDataAvailable(Sender: TIdTelnet; const Buffer: TIdBytes);
procedure ButtonUserClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ButtonPasswordClick(Sender: TObject);
private
IdTelnet: TIdTelnet;
StrList: TStringList;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StrList := TStringList.Create;
ButtonUser.OnClick := ButtonUserClick;
ButtonPassword.OnClick := ButtonPasswordClick;
IdTelnet := TIdTelnet.Create(Self);
With IdTelnet do
begin
Host := '127.0.0.1';
Port := 23;
OnDataAvailable := IdTelnetDataAvailable;
Connect;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
StrList.Free;
end;
procedure TForm1.ButtonUserClick(Sender: TObject);
begin
IdTelnet.SendString('MyUser' + #13#10);
end;
procedure TForm1.ButtonPasswordClick(Sender: TObject);
begin
IdTelnet.SendString('MyPassword' + #13#10);
end;
procedure TForm1.IdTelnetDataAvailable(Sender: TIdTelnet; const Buffer: TIdBytes);
var
I, Count: Integer;
begin
Count := Memo1.Lines.Count;
StrList.Text := TEncoding.ANSI.GetString(Buffer);
for I := 0 to StrList.Count-1 do
begin
if (I = 0) and (Count <> 0) then
Memo1.Lines[Count-1] := Memo1.Lines[Count-1] + StrList[I]
else
Memo1.Lines.Add(StrList[I]);
end;
end;
end.