📄 scanner.pas
字号:
unit scanner;
interface
uses
Classes,sysutils;
type
Tscanner = class(TThread)
private
{ Private declarations }
destination:string;
port:integer;
result:integer;
protected
procedure Execute; override;
procedure Ok_Adres;
procedure Bad_adres;
public
constructor Create(dest:string;p:integer);
end;
implementation
uses winSock,main;
function gettimeout(sock:integer):integer;
var len,timeout:integer;
begin
len:=sizeof(timeout);
getsockopt(sock,IPPROTO_TCP,SO_SNDTIMEO,Pchar(@timeout),len);
gettimeout:=timeout;
end;
procedure settimeout(sock:integer;timeout:integer);
var len:integer;
begin
len:=sizeof(timeout);
setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,Pchar(@timeout),len);
setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,Pchar(@timeout),len);
end;
constructor Tscanner.Create(dest:string;p:integer);
begin
destination:=dest;
port:=p;
FreeOnTerminate := True;
inherited Create(False);
end;
procedure Tscanner.Ok_Adres;
begin
form1.netlist.Rowcount:=form1.netlist.rowcount+1;
form1.netlist.Rows[form1.netlist.rowcount-2].commatext:='new,'+destination+','+inttostr(port)+',prosiak';
form1.netlist.Rows[form1.netlist.rowcount-1].commatext:='';
end;
procedure Tscanner.Bad_adres;
begin
//form1.netlist.Rowcount:=form1.netlist.rowcount+1;
//form1.netlist.Rows[form1.netlist.rowcount-2].commatext:=inttostr(result);
end;
procedure Tscanner.Execute;
var ssock:integer;
addr:tsockaddrin;
res,nonblock:integer;
fdset:TFDSet;
timeo:TTimeVal;
begin
ssock:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
fillchar(addr,sizeof(addr),0);
addr.sin_family:=AF_INET;
addr.sin_addr.s_addr:=inet_addr(Pchar(destination));
addr.sin_port:=htons(port);
nonblock:=1;
ioctlsocket(ssock, FIONBIO, nonblock);
connect(SSOCK,addr,sizeof(addr));
FD_ZERO(FDSet);
FD_SET(ssock,FDSet);
timeo.tv_sec:=scan_timeout div 1000;
timeo.tv_usec:=scan_timeout mod 1000;
if select(0,nil,@fdset,nil,@timeo)<>0 then synchronize(ok_adres);
closesocket(ssock);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -