Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сканер портов [D7, WinXP]


Ghost_ ©   (2003-03-03 14:28:00) 

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


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

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


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;


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

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:39:00) [3]


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



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


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

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

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

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


Ghost_   (2003-03-04 12:34:00) [4]

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


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

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


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


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



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


при подразумеваемом 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;


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

И хто бы это мог быть! -подумал Винипух...
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;

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


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

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


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

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


Ghost_   (2003-03-03 17:06:00) [10]

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


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

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


Ghost_   (2003-03-03 16:23:00) [12]

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


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

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


Ghost_   (2003-03-03 16:04:00) [14]

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


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

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


Ghost_   (2003-03-03 15:31:00) [16]

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


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

Ну типа того:

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо