⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clonescan.pas

📁 OICQ黑客工具。可以查看对方IP地址
💻 PAS
📖 第 1 页 / 共 2 页
字号:
            (
                (Sender as TMenuItem).GetParentMenu as TPopupMenu
            ).PopupComponent as TListBox
        ).Items.SaveToFile(SaveDlg.FileName);
    end;
end;

procedure TCloneScanDlg.FormDestroy(Sender: TObject);
begin
CloneScanDlg:=nil;
end;

procedure TCloneScanDlg.btnCloseClick(Sender: TObject);
begin
Close;
end;

procedure TCloneScanDlg.PortListKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
index:Integer;
begin
if(Key=VK_DELETE)then
    begin
    index:=PortList.ItemIndex;
    DeletePortByIndex(index);
    PortList.Items.Delete(PortList.ItemIndex);
    PortList.ItemIndex:=index;
    end;
end;

procedure TCloneScanDlg.ProcessReponse(buf: array of char;
  buflen: Integer;fromIp:string;fromPort:WORD);
var
uid:string;
i:Integer;
begin
uid:='';
if(buf[4]=chr($79))then//Direct msg Reponse
    begin
    for i:=7 to buflen -2 do
        begin
        uid:=uid+buf[i];
        end;
    if(FindPortInfo(fromPort)<0)then
        begin
        Inc(nInfoCnt);
        SetLength(info,nInfoCnt);
        info[nInfoCnt-1].nPort:=fromPort;
        info[nInfoCnt-1].strUID:=uid;
        ListLock.BeginWrite;
        info[nInfoCnt-1].nIndex:=PortList.Items.Add('Port:'+IntToStr(fromPort)+'  ID:'+uid);
        lbTargetNumber.Caption:=IntToStr(nInfoCnt);
        ListLock.EndWrite;
        end;
    end;
end;

{procedure TCloneScanDlg.btnStartClick(Sender: TObject);
var
addr:TSockAddr;
begin
if(not CheckInput)then Exit;
btnStart.Enabled:=False;
OutTimer.Enabled:=False;
OutTimer.Interval:=edTimeOut.Value;
FSocket:=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(FSocket<>INVALID_SOCKET)then
    begin
    Addr.sin_family := AF_INET;
    Addr.sin_addr.s_addr := INADDR_ANY;
    Addr.sin_port := 0;
    if(bind(FSocket,addr,sizeof(addr))<>SOCKET_ERROR)then
        begin
        StopFlag:=False;
        if(BeginThread(nil,4096,ScanFunc,Pointer(FSocket),0,nThreadId)=NULL)then
            begin
            ShowMessage('Thread error'+IntToStr(GetLastError));
            end;
        try
            SendPackage;
            lbStatus.Caption:='等待回答...';
            OutTimer.Enabled:=True;
        except
            ShutDownThread;
            closesocket(FSocket);
            btnStart.Enabled:=False;
            end;
        end;

    end;
end;}

{procedure TCloneScanDlg.SendPackage;
var
addr:TSockAddr;
port:WORD;
ip:string;
buflen,i:Integer;
buf:array [0..2048] of char;
begin
ZeroMemory(@addr,sizeof(addr));
if(CheckInput)then
    begin
    lbStatus.Caption:='正在发送...';
    Refresh;
    ip:=edIPAddr.Text;
    for port:=edStartPort.Value to edStopPort.Value do
        begin
        Inc(nFakeCnt);
        for i:=0 to edTimes.Value-1 do
            begin
            buflen:=MakeDirectMsgBuf(buf,nFakeCnt,edSrcId.text,0,Date,Time,'');
            addr.sin_family:=AF_INET;
            addr.sin_addr.S_addr:=inet_addr(PChar(ip));
            addr.sin_port:=htons(port);
            if(sendto(FSocket,buf,buflen,0,addr,sizeof(addr))=SOCKET_ERROR)then
                begin
                ShowMessage('Send error'+IntToStr(GetLastError));
                break;
                end;
            end;
        end;
    end;
end;}

procedure TCloneScanDlg.ShutdownThread;
begin
StopFlag:=TRUE;
end;

procedure TCloneScanDlg.DeletePortByIndex(Index: Integer);
var
i:Integer;
begin
for i:=0 to nInfoCnt do
    begin
    if(info[i].nIndex=index)then
        begin
        info[i].nPort:=0;
        Break;
        end;
    end;
end;

procedure TCloneScanDlg.DoPortScan(sinAddr:DWORD;StartPort,EndPort:WORD;LoopCnt,TimeOut:DWORD);
var
addr:TSockAddr;
s:TSocket;
RecvTimeOut,i:Integer;
buf:array [0..2048] of char;
fromaddr:TSockAddr;
fromlen:Integer;
buflen:Integer;
ErrCode:Integer;
port:WORD;
begin
if(not CheckInput)then Exit;
s:=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
RecvTimeOut:=TimeOut;
if(s<>INVALID_SOCKET)then
    begin
    Addr.sin_family := AF_INET;
    Addr.sin_addr.s_addr := INADDR_ANY;
    Addr.sin_port := 0;
    if(bind(s,addr,sizeof(addr))<>SOCKET_ERROR)then
        begin
        if(SOCKET_ERROR=setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,@RecvTimeOut,sizeof(RecvTimeOut)))then
            begin
            ShowMessage('setsockopt error:'+IntToStr(GetLastError));
            end
        else
            begin
//            lbStatus.Caption:='正在扫描...';
            
            for port:=StartPort to EndPort do
                begin
                Inc(nFakeCnt);
                StatusLock.BeginWrite;
                Inc(nScanCnt);
//                lbStatus.Caption:='已扫描端口个数:'+IntToStr(nScanCnt);
//                lbStatus.Repaint;
                if((nScanCnt mod 10)=9)then
                    begin
                    ProgBar.StepIt;
                    end;
                if(nScanCnt=(edStopPort.Value-edStartPort.Value))then
                    begin
                    ProgBar.Position:=ProgBar.Max;
                    end;
                StatusLock.EndWrite;
                for i:=0 to LoopCnt-1 do
                    begin
                    //sending .....
                    buflen:=MakeDirectMsgBuf(buf,nFakeCnt,edSrcId.text,0,Date,Time,'');
                    addr.sin_family:=AF_INET;
                    addr.sin_addr.S_addr:=sinAddr;
                    addr.sin_port:=htons(port);
                    if(sendto(s,buf,buflen,0,addr,sizeof(addr))=SOCKET_ERROR)then
                        begin
                        ShowMessage('Send error'+IntToStr(GetLastError));
                        break;
                        end;
                    //recv...
                    ZeroMemory(@fromaddr,sizeof(fromaddr));
                    fromlen:=SizeOf(fromaddr);
                    buflen:=recvfrom(s,buf,2048,0,fromaddr,fromlen);
                    if(buflen<>SOCKET_ERROR)then
                        begin//Get it!
                        CloneScanDlg.ProcessReponse(buf,buflen,inet_ntoa(fromaddr.sin_addr),ntohs(fromaddr.sin_port));
                        Break;//Let 's scan next port
                        end
                    else
                        begin
                        ErrCode:=GetLastError;
                        if(ErrCode=10054)then
                            begin
                            //ICMP report destination unrecheable,let's scan next port
                            Break;
                            end;
                        end;
                    end;//end for LoopCnt
                Application.ProcessMessages;
                if(StopFlag)then Break;
                end;//End for port
            end;
        end
    else//bind error
        begin
        ErrCode:=GetLastError;
        ShowMessage('Bind error'+IntToStr(ErrCOde));
        end;
    closesocket(s);
    end;
end;

procedure TCloneScanDlg.btnStartClick(Sender: TObject);
begin
if(not CheckInput)then Exit;
nRunFlag:=edThreadNum.Value;
nScanCnt:=0;
StopFlag:=False;
if(edStopPort.Value<=ProgBar.Min)then
    begin
    ProgBar.Min:=edStartPort.Value;
    ProgBar.Max:=edStopPort.Value;
    end
else
    begin
    ProgBar.Max:=edStopPort.Value;
    ProgBar.Min:=edStartPort.Value;
    end;
if((edStopPort.Value-edStartport.Value)<50)then
    ProgBar.Step:=1
else ProgBar.Step:=10;

btnStart.Enabled:=False;
btnPause.Enabled:=True;
ThreadPortScan;
Application.ProcessMessages;
end;

procedure TCloneScanDlg.btnPauseClick(Sender: TObject);
begin
ShutDownThread;
end;

{function TCloneScanDlg.GetTimeOutOfPeer(ip: String): Integer;
begin
Result:=500;
end;} 

procedure TCloneScanDlg.ThreadPortScan;
var
i:DWORD;
//hThreads:array of LongWord;
nThreadId:LongWord;
param:PPortScanParam;
step:DWORD;
LastPort:WORD;
begin
//SetLength(hThreads,edThreadNum.Value);
step:=(edStopPort.Value-edStartPort.Value) div edThreadNum.Value;
LastPort:=edStartPort.Value;

for i:=0 to edThreadNum.Value-2 do
    begin
    param:=AllocMem(SizeOf(TPortScanParam));
    param.sinAddr:=inet_addr(PChar(edIPAddr.Text));
    param.dwID:=StrToIntDef(edSrcId.Text,0);
    param.nLoopCnt:=edTimes.Value;
    param.nTimeOut:=edTimeOut.Value;
    param.nStartPort:=DWORD(edStartPort.Value)+i*step;
    param.nStopPort:=param.nStartPort+step-1;
    param.nStepPort:=step;
    LastPort:=param.nStopPort+1;
    if(BeginThread(nil,4096,ThreadScanFunc,param,0,nThreadId)=NULL)then
        begin
        ShowMessage('Begin Thread error'+IntToStr(GetLastError));
        Break;
        end;
    end;
param:=AllocMem(SizeOf(TPortScanParam));
param.sinAddr:=inet_addr(PChar(edIPAddr.Text));
param.dwID:=StrToIntDef(edSrcId.Text,0);
param.nLoopCnt:=edTimes.Value;
param.nTimeOut:=edTimeOut.Value;
param.nStartPort:=LastPort;
param.nStopPort:=edStopPort.Value;
param.nStepPort:=step;
BeginThread(nil,4096,ThreadScanFunc,param,0,nThreadId);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -