Форум: "Сети";
Текущий архив: 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