data.pas
上传用户:hbtcygglw
上传日期:2007-01-07
资源大小:281k
文件大小:5k
源码类别:

其他

开发平台:

Delphi

  1. unit data;
  2. {$define DEBUGVERSION}
  3. interface
  4. uses dialogs,windows,SysUtils,forms;
  5. type
  6.     TIPInfo=record
  7.         StartIp:string[18];
  8.         EndIp:string[18];
  9.         Country:string[16];
  10.         Location:string[54];
  11.         end;
  12. procedure LoadIPInfo(FileName:String);
  13. function FindIpInfo(ip:string):TIPInfo;
  14. procedure SendFakeMsg(SrcId,SrcFace,DestId,DestIp:string;DestPort:WORD;msg:String;aDate,aTime:TDateTime);
  15. function StrToIp(str:string):DWORD;
  16. function GetParse(buf:array of char;buflen,StartPos:integer;var s:string):integer;
  17. function ArrayStrCopy(var buf:array of char;buflen,pos:Integer;s:string):Integer;
  18. function GetStrFromBuf(buf:array of char;BufLen,nOffset:DWORD):string;
  19. function ParseStrFromBuf(buf:array of char;buflen,nOffset,flag:DWORD;var str:String):Integer;
  20. var
  21. IPInfoCnt:Integer;
  22. IpInfos:array of TIPInfo;
  23. nFakeCnt:Integer;
  24. implementation
  25. uses info,main,dbf_c;
  26. function ParseStrFromBuf(buf:array of char;buflen,nOffset,flag:DWORD;var str:String):Integer;
  27. var
  28. i:DWORD;
  29. begin
  30. i:=nOffset;
  31. str:='';
  32. while(i<BufLen)do
  33.     begin
  34.     if((buf[i]=chr($1f)) or (buf[i]=chr($1e)))then Break
  35.     else str:=str+buf[i];
  36.     Inc(i);
  37.     end;
  38. Result:=i;
  39. end;
  40. function GetStrFromBuf(buf:array of char;BufLen,nOffset:DWORD):string;
  41. var
  42. i:DWORD;
  43. begin
  44. i:=nOffset;
  45. Result:='';
  46. while(i<BufLen)do
  47.     begin
  48.     if(buf[i]=chr($1f))then Break
  49.     else Result:=Result+buf[i];
  50.     Inc(i);
  51.     end;
  52. end;
  53. function StrToIp(str:string):DWORD;
  54. var
  55. s:string;
  56. l,i,parse:Integer;
  57. adr:array [0..3] of DWORD;
  58. begin
  59. parse:=0;
  60. l:=length(str);
  61. for i:=1 to l+1 do
  62.     begin
  63.     if(i<=l) and (str[i]<>'.')then
  64.         begin
  65.         s:=s+str[i];
  66.         end
  67.     else
  68.         begin
  69.         adr[parse]:=StrToIntDef(s,0);
  70.         Inc(parse);
  71.         s:='';
  72.         end;
  73.     end;
  74. Result:=(adr[0]shl 24)or(adr[1] shl 16) or(adr[2] shl 8) or adr[3];
  75. end;
  76. function IPEqu(ip1,ip2:string):Boolean;
  77. begin
  78. Result:=(StrToIp(ip1)=StrToIp(ip2));
  79. end;
  80. function GetParse(buf:array of char;buflen,StartPos:integer;var s:string):integer;
  81. var
  82. i,st:Integer;
  83. begin
  84. s:='';
  85. st:=StartPos;
  86. Result:=0;
  87. //remove head $1f and $1e
  88. for i:=StartPos to buflen-1 do
  89.     begin
  90.     if(not (Ord(buf[i]) in [$1e,$1f]))then Break
  91.     else Inc(st);
  92.     end;
  93. for i:=st to buflen-1 do
  94.     begin
  95.     if(not (Ord(buf[i]) in [$1e,$1f]))then
  96. //    if(Ord(buf[i])<>$1f)then
  97.         begin
  98.         s:=s+buf[i];
  99.         end
  100.     else
  101.         begin
  102.         Result:=i+1;
  103.         exit;
  104.         end;
  105.     end;
  106. end;
  107. function ArrayStrCopy(var buf:array of char;buflen,pos:Integer;s:string):Integer;
  108. var
  109. i,l:Integer;
  110. begin
  111. Result:=pos;
  112. l:=length(s);
  113. for i:=1 to l do
  114.     begin
  115.     if((pos+i-1)<buflen)then buf[pos+i-1]:=s[i];
  116.     Result:=pos+i;
  117.     end;
  118. end;
  119. procedure SendFakeMsg(SrcId,SrcFace,DestId,DestIp:String;DestPort:WORD;msg:String;aDate,aTime:TDateTime);
  120. var
  121. pBuf:array [0..2048]of char;
  122. i:Integer;
  123. begin
  124. for i:=0 to 2047 do
  125.     begin
  126.     pBuf[i]:=chr(0);
  127.     end;
  128. Inc(nFakeCnt);    
  129. pBuf[0]:=chr(2);
  130. pBuf[1]:=chr(0);
  131. pBuf[2]:=chr(0);
  132. pBuf[3]:=chr(0);
  133. pBuf[4]:=chr($80);
  134. pBuf[5]:=chr(nFakeCnt);
  135. pBuf[6]:=chr(0);
  136. pBuf[7]:='0';
  137. pBuf[8]:='0';
  138. pBuf[9]:=chr($1f);
  139. i:=ArrayStrCopy(pBuf,2048,10,SrcId);
  140. pBuf[i]:=chr($1f);
  141. i:=ArrayStrCopy(pBuf,2048,i+1,DestId);
  142. pBuf[i]:=chr($1f);
  143. pBuf[i+1]:='0';
  144. pBuf[i+2]:=chr($1f);
  145. i:=ArrayStrCopy(pBuf,2048,i+3,SrcFace);
  146. pBuf[i]:=chr($1f);
  147. i:=ArrayStrCopy(pBuf,2048,i+1,DateToStr(aDate));
  148. pBuf[i]:=chr($1f);
  149. i:=ArrayStrCopy(pBuf,2048,i+1,TimeToStr(aTime));
  150. pBuf[i]:=chr($1f);
  151. i:=ArrayStrCopy(pBuf,2048,i+1,msg);
  152. pBuf[i]:=chr($03);
  153. MainForm.FakeUDP.RemoteHost:=DestIp;
  154. MainForm.FakeUDP.RemotePort:=DestPort;
  155. MainForm.FakeUDP.SendBuffer(pBuf,i+1);
  156. //MainForm.Timer.Enabled:=True;
  157. end;
  158. function FindIpInfo(ip:string):TIPInfo;
  159. var
  160. sip,eip,ipd:DWORD;
  161. i:DWORD;
  162. n:Integer;
  163. begin
  164. ipd:=$ffffffff;
  165. i:=StrToIp(ip);
  166. for n:=0 to IPInfoCnt-1 do
  167.     begin
  168.     sip:=StrToIp(IPInfos[n].StartIp);
  169.     eip:=StrToIp(IPInfos[n].EndIp);
  170.     if(sip<i) and (eip>i)then
  171.         begin
  172.         if((eip-sip)<ipd)then
  173.             begin
  174.             ipd:=eip-sip;
  175.             Result:=IPInfos[n];
  176.             end;
  177.         end;
  178.     end;
  179. end;
  180. {procedure LoadIPInfo(FileName:String);
  181. var
  182. i:Integer;
  183. f:File of TIPInfo;
  184. begin
  185. Assign(f,FileName);
  186. Reset(f);
  187. IPInfoCnt:=FileSize(f);
  188. SetLength(IpInfos,IPInfoCnt);
  189. i:=0;
  190. while not eof(f) do
  191.     begin
  192.     Read(f,IpInfos[i]);
  193.     Inc(i);
  194.     end;
  195. CloseFile(f);
  196. end;}
  197. procedure LoadIPInfo(FileName:String);
  198. var
  199. dbf:TDBF;
  200. i:Integer;
  201. begin
  202. i:=0;
  203. dbf:=TDBF.Create(Application);
  204. dbf.TableName:=FileName;
  205. dbf.Open;
  206. IPInfoCnt:=dbf.RecordCount;
  207. SetLength(IpInfos,IPInfoCnt);
  208. try
  209.     while(not dbf.Eof)do
  210.         begin
  211.         IpInfos[i].StartIp:=dbf.FieldByName('StartIp').AsString;
  212.         IpInfos[i].EndIp:=dbf.FieldByName('EndIp').AsString;
  213.         IpInfos[i].Country:=dbf.FieldByName('Country').AsString;
  214.         IpInfos[i].Location:=dbf.FieldByName('Local').AsString;
  215.         dbf.Next;
  216.         Inc(i);
  217. //        if(i=190)then ShowMessage('break');
  218.         end;
  219. except
  220.     On e:Exception do
  221.         begin
  222.         ShowMessage(e.Message);
  223.         end;
  224.     end;
  225. dbf.Close;
  226. end;
  227. end.