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

Вниз

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

 
новенький в Делфи   (2002-03-19 18:45) [0]

Вот откопал инфу по сканерам портов и решил свой написать... но он у меня виснет.
вот код:

.....
tсpClient1.Remotehost:=Edit1.Text;
for i:=StrToInt(edit2.text) to StrToInt(edit3.text) do
begin
tсpClient1.RemotePort:=IntToStr(i);
tсpClient1.open;
if tсpClient1.Connected then memo1.Lines.add(intToStr(i) +" Active!");
tсpClient1.close;
end;
memo1.lines.add("Done!");
подскажите плиз что не так, да, а если использую компонент ClientSocket, то выдаёт ошибку, что-то вроде -Windows error: (10049) API windows....-


 
новенький в Делфи   (2002-03-19 18:52) [1]

..добывлю кое что-
Если брать небольшой промежуток(1-3) сканируемых портов, то независает, но очень долго надо ждать пока он два порта просмотрит, может сканер пишется по другому принципу?


 
drpass   (2002-03-19 19:16) [2]

Да нет, все правильно. Просто на перебор большого количества портов уходит много времени. Попробуй на своем компе (127.0.0.1) сначала посканировать - все должно работать.


 
новенький в Делфи   (2002-03-19 21:54) [3]

когда беру портов десять, то виснет, и винда пишет что сканер не отвечает, приходится завершать работу через диспетчер программ :(

Может можно как нибудь по другому написать сканер?


 
Радамант   (2002-03-20 05:58) [4]

В твоём случае по идее должно помочь вынесение самой функции сканирования в отдельный поток. CreateThread.


 
Vogul   (2002-03-20 11:21) [5]


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
WinSock, StdCtrls;

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

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
from, I, addr:Integer;
m_Socket: TSocket;
m_remote:sockaddr_in;
hp:phostent;
begin
if WSAStartup($202, wsaData) <> 0 then Exit;

addr := inet_addr(PChar("127.0.0.1"));
hp := gethostbyaddr(PChar(@addr),4,AF_INET);
if hp = nil then Exit; //??? ??????.

CopyMemory(@(m_Remote.sin_addr),(hp.h_addr_list)^, hp^.h_length);
m_Remote.sin_family := hp^.h_addrtype;
Label1.Caption := TimeToStr(Time);
for i := 1 to 300 do begin
m_Socket := socket(AF_INET, SOCK_STREAM, 0);
if m_Socket = INVALID_SOCKET then Exit;
m_remote.sin_port := htons(i);
from := SizeOf(m_remote);
Memo1.Lines.Add("Connect to "+inet_ntoa(m_remote.sin_addr)+":"+IntTostr(i));
if connect(m_Socket, m_remote, from)= SOCKET_ERROR then begin
Memo1.Lines.Add("Reject");
end
else
Memo1.Lines.Add("Accept");
closesocket(m_Socket);
end;
Label2.Caption := TimeToStr(Time);
WSACleanUp;
end;

end.

И в отдельный поток это.


 
Donal_Graeme   (2002-03-20 14:22) [6]


unit mainunit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Sockets, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
TCP: TTcpClient;
ListBox1: TListBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Bevel1: TBevel;
Label6: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure TCPConnect(Sender: TObject);
procedure TCPError(Sender: TObject; SocketError: Integer);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Stopped : Boolean;
CurPort, EndPort : LongInt;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Stopped := True;
end;

procedure TForm1.TCPConnect(Sender: TObject);
begin
TCP.Disconnect;
If Stopped then Exit;
ListBox1.Items.Add(TCP.RemotePort);
Inc (CurPort);
If CurPort > EndPort then
begin
Stopped := True;
Exit;
end;
TCP.RemotePort := IntToStr (CurPort);
Label1.Caption := IntToStr (CurPort);
Application.ProcessMessages;
TCP.Connect;
end;

procedure TForm1.TCPError(Sender: TObject; SocketError: Integer);
begin
If Stopped then Exit;
CurPort := CurPort +1;
If CurPort > EndPort then
begin
Stopped := True;
Exit;
end;
TCP.RemotePort := IntToStr (CurPort);
Label1.Caption := IntToStr (CurPort);
Application.ProcessMessages;
TCP.Connect;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Stopped := False;
CurPort := StrToInt (Edit2.Text);
EndPort := StrToInt (Edit3.Text);
TCP.RemoteHost := Edit1.Text;
TCP.RemotePort := Edit2.Text;
TCP.Connect;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Stopped := True;
end;

end.



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

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

Наверх




Память: 0.46 MB
Время: 0.008 c
8-97354
Kirill
2001-12-28 14:34
2002.05.30
DirectX и движение


1-97339
8787
2002-05-19 23:14
2002.05.30
значок проги на GroupBox7


1-97238
Doni
2002-05-20 15:28
2002.05.30
XML


14-97405
kronprince
2002-04-22 11:04
2002.05.30
Срочно нужна муза программирования ! ! !


3-97147
Aidan
2002-05-07 09:59
2002.05.30
Запрос к нескольким базам данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский