procedure DspMsg(msg:string); //显示信息 { Private declarations } public { Public declarations } end;
var Form1: TForm1; port:integer;
implementation
{$R *.dfm} function lookup_hostname(const hostname:string):longint; //把域名转化成IP地址 var remotehost:PHostEnt; ip_address:longint; begin ip_address:=-1; try if hostname='' then begin lookup_hostname:=ip_address; EXIT; end else begin ip_address:=winsock.inet_addr(pchar(hostname)); if ip_address=SOCKET_ERROR then begin RemoteHost:=winsock.gethostbyname(pchar(hostname)); if (remotehost=NIL) or (remoteHost^.h_length<=0) then begin lookup_hostname:=ip_address; EXIT; end else ip_address:=longint(pointer(remotehost^.h_addr_list^)^); end; end; except ip_address:=-1; end; lookup_hostname:=ip_address; end;
procedure TFOrm1.DspMsg(msg: string); begin memo1.Lines.Add(msg+'...'); if Memo1.Lines.Count>200 then Memo1.Lines.Delete(0); end;
procedure TForm1.SockEvent(var msg1:tmessage); //处理socket消息 begin
if msg1.LParam=FD_CONNECT then begin dspmsg('端口'+inttostr(port-1)+'开放'); memo1.Lines.add(inttostr(winsock.FD_CONNECT)); //表示对方端口开放 end; end;
procedure TForm1.FormCreate(Sender: TObject); var wsaData:TwsaData; begin //启动winsock动态链接库 memo1.Lines.Clear;
if WSAStartup (makeword(2,2), wsaData)<>0 then begin messagebox(application.handle,'无法启动winsock动态连接库!','警告',MB_OK or MB_APPLMODAL or MB_ICONWARNING); Application.Terminate; end; end;
procedure TForm1.FormDestroy(Sender: TObject); begin //关闭dll WSACleanup; end;
procedure TForm1.Button1Click(Sender: TObject); var flag:boolean; begin
Sockhd:=socket(AF_INET,SOCK_STREAM,0); //创建socket句柄 if Sockhd<0 then begin messagebox(application.handle,'无法创建句柄!','警告',MB_OK or MB_APPLMODAL or MB_ICONWARNING); exit; end;
//for cir:=0 to strtoint(edit3.Text)-strtoint(edit2.Text)-1 do //对指定端口进行循环扫描 //begin
if WSAasyncSelect(Sockhd,Form1.handle,WM_SOCKET,FD_ACCEPT or FD_CONNECT or FD_CLOSE or FD_READ or FD_WRITE)=SOCKET_ERROR then begin messagebox(application.handle,'无法创建句柄!','警告',MB_OK or MB_APPLMODAL or MB_ICONWARNING); exit; end; //异步socket
procedure TForm1.Button2Click(Sender: TObject); var cir:integer;//端口循环计数器 begin port:=strtoint(edit2.text); for cir:=strtoint(edit2.Text) to strtoint(edit3.Text) do //对指定端口进行循环扫描 begin memo1.lines.Add('scaning port'+inttostr(port)); button1.Click;