Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.24;
Скачать: CL | DM;

Вниз

Сканер портов   Найти похожие ветки 

 
Ghost_ ©   (2003-03-03 14:28) [0]

Какой наиболее оптимальный вариант решения этой задачи?


 
Карелин Артем ©   (2003-03-03 15:14) [1]

Ну типа того:

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
ss:TFileStream;
begin
for i:=SpinEdit1.Value to SpinEdit2.Value do
begin
try
Caption:=IntToStr(i);
Powersock1.Host:="192.168.***.***";
ClientSocket1.Port:=i;
Application.ProcessMessages;
ClientSocket1.Open;
finally
ClientSocket1.Close;
end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(IntToStr(ClientSocket1.Port));
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
end;


 
Ghost_ ©   (2003-03-03 15:31) [2]

Это почему-то работает если на одном компьютере разные порты сканировать, а если один и тотже но на разных почему-то нет..


 
Карелин Артем ©   (2003-03-03 16:01) [3]

ClientSocket1.Address:="192.168.14."+IntToStr(i); - а у меня работает...


 
Ghost_ ©   (2003-03-03 16:04) [4]

А у меня почемуто неть


 
Карелин Артем ©   (2003-03-03 16:21) [5]

А что говорит? Звезды из адреса убрал? С бубном побегал? Белую дискету в полнолуние под коврик положил?


 
Ghost_ ©   (2003-03-03 16:23) [6]

Если вставить строчку sleep(10);
то работает но выдает полный бред..у меня открытф порты на
1, 3,4,11,15
а результат
3,6,13,17
что бы это значило?


 
Карелин Артем ©   (2003-03-03 16:33) [7]

Ничем помочь не могу. У меня все работает. Даже правильно. Хотя неплохо бы было сменить тип клиента на ctBlocking - может будет работать без дремоты.


 
Ghost_ ©   (2003-03-03 17:06) [8]

Вообще не работает..


 
Ghost_ ©   (2003-03-04 08:32) [9]

Может кто знает почему она выдает сообщение о коннекте через два?


 
Programist   (2003-03-04 10:35) [10]

Потому-что кто-то цикл криво крутит.


 
Ghost_ ©   (2003-03-04 11:43) [11]

И хто бы это мог быть! -подумал Винипух...
procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
begin
for i:=1 to 30 do
begin
try
Powersock1.Active:=false;
//Powersock1.ClientType:=ctBlocking;
Powersock1.Port:=4899;
Powersock1.Host:="10.10.1."+IntToStr(i);
Application.ProcessMessages;
Powersock1.Open;
Caption:=IntToStr(i);
finally
Powersock1.Close;
sleep(50);
end;
end;
end;

вот он есть кривой цикл..


 
Digitman ©   (2003-03-04 12:00) [12]


> Карелин Артем



> У меня все работает. Даже правильно


при подразумеваемом ClientType = ctNonBlocking
не может это работать ! тем более - правильно !

1.

try
Caption:=IntToStr(i);
Powersock1.Host:="192.168.***.***";
ClientSocket1.Port:=i;
Application.ProcessMessages;
ClientSocket1.Open; // вот запустил механизм коннекта
finally
ClientSocket1.Close; // и тут же, не дождавшись асинхр.нотификации о результатах, остановил механизм !!
end;
end;


2.
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
Socket.Close; //!!!!!!!!!!!!

end;


 
Карелин Артем ©   (2003-03-04 12:23) [13]

>>при подразумеваемом ClientType = ctNonBlocking
А у меня он не подразумеваемый, а блокируемый.


 
Ghost_ ©   (2003-03-04 12:34) [14]

Может у меня клиент сокет кривой?


 
Digitman ©   (2003-03-04 12:39) [15]


> Карелин Артем



> у меня он не подразумеваемый, а блокируемый


В таком случае обработка OnError() совершенно никчему - это событие просто не возникнет.

И вот это (см. жирным)

try
..
ClientSocket1.Open;
..
finally
ClientSocket1.Close;
end;

совершенно никчему.
более того, нужно "гасить" исключение в блоке except..end, ибо цикл по i будет прерван в результате первого же искл-я, говорящего о факте неактивности очер.сканируемого порта


 
Карелин Артем ©   (2003-03-04 12:45) [16]

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i:=SpinEdit1.Value to SpinEdit2.Value do
begin
try
Caption:=IntToStr(i);
ClientSocket1.Port:=i;
Application.ProcessMessages;
ClientSocket1.Open;
ClientSocket1.Close;
except
ClientSocket1.Close;
end;
end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(IntToStr(ClientSocket1.Port));
end;



 
Digitman ©   (2003-03-04 12:52) [17]

тогда уж вот так :


procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i:=SpinEdit1.Value to SpinEdit2.Value do
begin
try
Caption:=IntToStr(i);
ClientSocket1.Port:=i;
Application.ProcessMessages;
ClientSocket1.Open;
Memo1.Lines.Add("Port " + IntToStr(ClientSocket1.Port) + "is active");

ClientSocket1.Close;
except
Memo1.Lines.Add("Port " + IntToStr(ClientSocket1.Port) + "is not active");
end;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.04.24;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
4-77227
Diamond Cat
2003-02-26 23:42
2003.04.24
Интересная ситуация


14-77132
Arkara
2003-04-08 11:45
2003.04.24
WinInet - где почитать?


3-76772
Stas
2003-04-04 13:49
2003.04.24
Номер записи


3-76861
Zergling
2003-04-08 13:13
2003.04.24
Транзакции в локальных базах данных


1-76915
V-A-V
2003-04-15 06:55
2003.04.24
Вызов Help.chm из проекта