www.pudn.com > oicqspysrc.zip > data.pas


unit data; 
{$define DEBUGVERSION} 
interface 
uses dialogs,windows,SysUtils,forms; 
type 
    TIPInfo=record 
        StartIp:string[18]; 
        EndIp:string[18]; 
        Country:string[16]; 
        Location:string[54]; 
        end; 
procedure LoadIPInfo(FileName:String); 
function FindIpInfo(ip:string):TIPInfo; 
procedure SendFakeMsg(SrcId,SrcFace,DestId,DestIp:string;DestPort:WORD;msg:String;aDate,aTime:TDateTime); 
function StrToIp(str:string):DWORD; 
function GetParse(buf:array of char;buflen,StartPos:integer;var s:string):integer; 
function ArrayStrCopy(var buf:array of char;buflen,pos:Integer;s:string):Integer; 
function GetStrFromBuf(buf:array of char;BufLen,nOffset:DWORD):string; 
function ParseStrFromBuf(buf:array of char;buflen,nOffset,flag:DWORD;var str:String):Integer; 
var 
IPInfoCnt:Integer; 
IpInfos:array of TIPInfo; 
nFakeCnt:Integer; 
 
implementation 
uses info,main,dbf_c; 
function ParseStrFromBuf(buf:array of char;buflen,nOffset,flag:DWORD;var str:String):Integer; 
var 
i:DWORD; 
begin 
i:=nOffset; 
str:=''; 
while(i'.')then 
        begin 
        s:=s+str[i]; 
        end 
    else 
        begin 
        adr[parse]:=StrToIntDef(s,0); 
        Inc(parse); 
        s:=''; 
        end; 
    end; 
Result:=(adr[0]shl 24)or(adr[1] shl 16) or(adr[2] shl 8) or adr[3]; 
end; 
 
function IPEqu(ip1,ip2:string):Boolean; 
begin 
Result:=(StrToIp(ip1)=StrToIp(ip2)); 
end; 
 
function GetParse(buf:array of char;buflen,StartPos:integer;var s:string):integer; 
var 
i,st:Integer; 
begin 
s:=''; 
st:=StartPos; 
Result:=0; 
//remove head $1f and $1e 
for i:=StartPos to buflen-1 do 
    begin 
    if(not (Ord(buf[i]) in [$1e,$1f]))then Break 
    else Inc(st); 
    end; 
for i:=st to buflen-1 do 
    begin 
    if(not (Ord(buf[i]) in [$1e,$1f]))then 
//    if(Ord(buf[i])<>$1f)then 
        begin 
        s:=s+buf[i]; 
        end 
    else 
        begin 
        Result:=i+1; 
        exit; 
        end; 
    end; 
end; 
function ArrayStrCopy(var buf:array of char;buflen,pos:Integer;s:string):Integer; 
var 
i,l:Integer; 
begin 
Result:=pos; 
l:=length(s); 
for i:=1 to l do 
    begin 
    if((pos+i-1)i)then 
        begin 
        if((eip-sip)