tempo de conexão do TIDTCPClient
estou fazendo um tipo de port scanner, usando idTcpClient da paleta indy. O objetivo é verificar se tem portas abertas no meu servidor que eu não queira que estejam abertas, ou se tem portas de saida que me permitem sair como client para uma conexão remota na internet, num servidor fora do meu.
Para isso estou usando um laço for, um contador i que vai da porta inicial até a porta final e um idtcpclient para apenas conectar em cada porta. Se ele conectar é porque a porta está aberta, creio eu, e se ele não conectar é porque a porta está fechada.
Funciona bem, porem é muito lento, mesmo para dar uma resposta negativa. Coloquei timeout 1, mas não sei se esse 1 é em segundos ou milissegundos, de qualquer forma parece que com ou sem esse timeout demora 1 ou mais segundos para tentar conectar em cada porta. Como eu posso fazer isso de forma mais rápida?
vou colocar aqui o codigo do meu programa:
Para isso estou usando um laço for, um contador i que vai da porta inicial até a porta final e um idtcpclient para apenas conectar em cada porta. Se ele conectar é porque a porta está aberta, creio eu, e se ele não conectar é porque a porta está fechada.
Funciona bem, porem é muito lento, mesmo para dar uma resposta negativa. Coloquei timeout 1, mas não sei se esse 1 é em segundos ou milissegundos, de qualquer forma parece que com ou sem esse timeout demora 1 ou mais segundos para tentar conectar em cada porta. Como eu posso fazer isso de forma mais rápida?
vou colocar aqui o codigo do meu programa:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdAntiFreezeBase, IdAntiFreeze, ExtCtrls, IdIntercept,
IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack;
//const
//PORTA_INI = 80;
//PORTA_FIN = 4000;
//PROCESS_MESSAGES_TIMEOUT = 100;
type
TForm1 = class(TForm)
tcp: TIdTCPClient;
mLista: TMemo;
btTesta: TButton;
edServer: TEdit;
Label1: TLabel;
lbStatus: TLabel;
btChega: TButton;
IdAntiFreeze1: TIdAntiFreeze;
Timer1: TTimer;
Button1: TButton;
edPortaIni: TEdit;
edPortaFin: TEdit;
Label2: TLabel;
Label3: TLabel;
edPMT: TEdit;
Label4: TLabel;
procedure btTestaClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btChegaClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FAbort: Boolean;
FPortaTimer: Integer;
procedure testar(porta: Integer);
public
function PORTA_INI : integer;
function PORTA_FIN : integer;
function PROCESS_MESSAGES_TIMEOUT : integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btTestaClick(Sender: TObject);
var port: Integer;
begin
tcp.Host := edServer.Text;
FAbort := False;
FPortaTimer := PORTA_INI;
for port := PORTA_INI to PORTA_FIN do
begin
if FAbort then
begin
//close;
Break;
end;
testar(port);
if( port mod PROCESS_MESSAGES_TIMEOUT) = 0 then
Application.ProcessMessages;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Self.DoubleBuffered := True;
FAbort := False;
FPortaTimer := PORTA_INI;
end;
procedure TForm1.btChegaClick(Sender: TObject);
begin
FAbort := True;
end;
procedure TForm1.testar(porta: Integer);
begin
lbStatus.Caption := ´testando ´ + IntToStr(porta);
tcp.Port := porta;
try
tcp.Connect;
except
end;
if tcp.Connected then
begin
mLista.Lines.Add(IntToStr(tcp.Port));
tcp.Disconnect;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FAbort then
begin
Timer1.Enabled := False;
//close;
end;
if not tcp.Connected then
begin
testar(FPortaTimer);
Inc(FPortaTimer);
end;
if FPortaTimer >= PORTA_FIN then
Timer1.Enabled := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
tcp.Host := edServer.Text;
FAbort := False;
FPortaTimer := PORTA_INI;
Timer1.Enabled := True;
end;
function TForm1.PORTA_FIN: integer;
begin
Result := StrToInt(edPortaFin.Text);
end;
function TForm1.PORTA_INI: integer;
begin
Result := StrToInt(edPortaIni.Text);
end;
function TForm1.PROCESS_MESSAGES_TIMEOUT: integer;
begin
Result := StrToInt(edPMT.Text);
end;
end.Vitor Rubio
Curtidas 0