Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
новенький в Делфи   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
1-97277
Well
2002-05-18 16:35
2002.05.30
Excel


1-97316
Doctor Deejay
2002-05-19 18:24
2002.05.30
Ну помогите же мне кто-то!!!


8-97361
pam
2002-01-03 12:02
2002.05.30
Фильтры...


1-97331
Gumbert-Gumbert
2002-05-19 16:23
2002.05.30
Вопрос по функции: TTreeView.Items.AddObject(TTreeNode, S, Ptr)


3-97111
Elvira
2002-04-30 11:10
2002.05.30
субд Oracle8i





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский