Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > сканер через IdTCPClient


Автор: Maestro 21.12.2005, 17:28
Дайте пожалуйста пример быстрого сканера 21 (FTP) порта по LAN 10.10.10.1-10.10.10.255. Я пробовал с компонентом IdTCPClient в 16 потоков вобще невышло (невидит серверов), а 10 потоков работает, но чё-то медленно. Есть-же проги котрые делают это быстро.

Автор: Snowy 21.12.2005, 18:09
Вот:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  type
  TScanTread = class(TThread)
  private
    tcp: TIdTCPClient;
  protected
    procedure Execute; override;
    procedure Sync;
  public
    host: string;
    port: integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TScanTread.Sync;
begin
  Form1.Memo2.Lines.Add('Есть: '+Host);
end;

procedure TScanTread.Execute;
begin
  tcp:=TIdTCPClient.Create(Form1);
  tcp.Host:=Host;
  tcp.Port:=Port;
  try
    tcp.Connect(2000);
    if tcp.Connected then Synchronize(Sync);
  finally
    tcp.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: byte;
begin
  for i:=1 to 254 do
    with TScanTread.Create(true) do
    begin
      Host:='10.10.10.'+IntToStr(i);
      Port:=21;
      FreeOnTerminate:=true;
      Memo1.Lines.Add(Host+' поставлен на скан.');
      Resume;
    end;
end;

end.

Быстрее не бывает smile

Автор: Maestro 21.12.2005, 20:24
Спасибо за пример, но он не все сервера видит, даже если таймаут ставлю 10000. Прога SimpleFTP видит около 10 открытых портов, а моё приложение 2. Что делать?

Автор: Snowy 21.12.2005, 22:30
Видимо проблемма в чем-то другом.
Я, когда тестил этот код просканил сеть меньше, чем за секунду. Нашел все.
(Меня за это чуть не убили smile )
Вероятно есть какая-то защита от сканирования.

Цитата(Maestro @ 21.12.2005, 20:24)
Прога SimpleFTP видит около 10 открытых портов, а моё приложение 2. Что делать?

Так портов или компьютеров?
Может там ftp на других портах. Или может она врет...
Ты их вручную на коннект проверял?

Автор: Maestro 22.12.2005, 18:24
Цитата
Так портов или компьютеров?
Я имел в виду компьютеров.
Цитата
Может там ftp на других портах. Или может она врет...
Исключено. Я и вручную проверял. Я когда тестил тот пример, что я привёл выше - в 5 потоков то находит больше серверов чем в 10 потоков, а 16 потоков вообще находит только мой сервер. В чем-же проблема? Как мне это сделать?....

Автор: Snowy 22.12.2005, 18:55
Да тебя, дружок, просто блокируют... За скан портов.
Нужно увеличивать интервал и сканить в один поток.

Автор: Maestro 24.12.2005, 16:05
Спасибо.

Автор: Maestro 25.12.2005, 20:59
...Но все равно непонятно. Немогу сделать сканирование быстрее чем прога SimpleFTP (от 1 до 255 за 3 мин.) ) или хотябы приблезительно одинаково. У меня не получается сделать быстрей чем одно соединения в секунду (от 1 до 255 за 4.5 мин.). Это вопрос скорее всего не по делфи а по сетям. Если кто знает подскажите.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)