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


unit test; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  StdCtrls, Db, DBTables, Grids, DBGrids,data,winsock; 
 
type 
  TForm1 = class(TForm) 
    Button1: TButton; 
    Label1: TLabel; 
    AddrTable: TTable; 
    DataSource1: TDataSource; 
    AddrTableSTARTIP: TStringField; 
    AddrTableENDIP: TStringField; 
    AddrTableCOUNTRY: TStringField; 
    AddrTableLOCAL: TStringField; 
    AddrTableTHANK: TStringField; 
    Button2: TButton; 
    Edit1: TEdit; 
    Button3: TButton; 
    ListBox: TListBox; 
    Button4: TButton; 
    Button5: TButton; 
    procedure Button1Click(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure Button3Click(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    procedure Button4Click(Sender: TObject); 
    procedure Button5Click(Sender: TObject); 
  private 
    { Private declarations } 
    FSocket:TSocket; 
    Loop:Boolean; 
  public 
    { Public declarations } 
  end; 
//const 
//SOCK_RAW=3; 
//IPPROTO_RAW=255; 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.DFM} 
uses info; 
function StrToIp(str:string):DWORD; 
var 
s:string; 
l,i,parse:Integer; 
adr:array [0..3] of DWORD; 
begin 
parse:=0; 
l:=length(str); 
for i:=1 to l+1 do 
    begin 
    if(i<=l) and (str[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; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
f:File of TIPInfo; 
info:TIPInfo; 
begin 
AssignFile(f,'IP.dat'); 
Rewrite(f); 
AddrTable.Open; 
while not AddrTable.Eof do 
    begin 
    info.StartIp:=AddrTable.FieldByName('StartIp').AsString; 
    info.EndIp:=AddrTable.FIeldBYName('EndIp').AsString; 
    info.Country:=AddrTable.FieldByName('Country').AsString; 
    info.Location:=AddrTable.FieldByName('LOCAL').AsString; 
    Write(f,info); 
    AddrTable.Next; 
    end; 
AddrTable.Close; 
CloseFile(f); 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
LoadIPInfo('ip.dat'); 
ShowMessage(IntToStr(IpInfoCnt)); 
end; 
 
procedure TForm1.Button3Click(Sender: TObject); 
var 
IpInf:TIPInfo; 
begin 
IpInf:=FindIPInfo(Edit1.Text); 
Edit1.Text:=IpInf.Country+IpInf.Location; 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
LoadIPInfo('ip.dat'); 
end; 
 
procedure TForm1.Button4Click(Sender: TObject); 
var 
d:TWSAData; 
val:Boolean; 
addr:TSockAddr; 
sz:Integer; 
buf:array [0..2048] of char; 
begin 
WSAStartup(2,d); 
FSocket:=socket(AF_INET,SOCK_RAW,IPPROTO_UDP); 
if(FSocket=INVALID_SOCKET)then 
    begin 
    ShowMessage('socket error:'+IntToStr(GetLastError)); 
    end; 
val:=True; 
{if(setsockopt(FSocket,SOl_SOCKET,SO_REUSEADDR,@val,sizeof(val))=SOCKET_ERROR)then 
    begin 
    ShowMessage('setsockopt error:'+IntToStr(GetLastError)); 
    end;} 
addr.sin_family:=AF_INET; 
addr.sin_port:=4000; 
addr.sin_addr.s_addr := INADDR_ANY; 
 
if(bind(FSocket,addr,sizeof(addr))=SOCKET_ERROR)then 
    begin 
    ShowMessage('setsockopt error:'+IntToStr(GetLastError)); 
    end; 
sz:=sizeof(addr); 
button4.enabled:=false; 
button5.enabled:=true; 
Loop:=True; 
{while(Loop)do 
    begin 
    recvfrom(FSocket,buf,2048,0,addr,sz); 
    ListBox.Items.add(buf); 
    Application.ProcessMessages; 
    end;} 
end; 
 
procedure TForm1.Button5Click(Sender: TObject); 
begin 
Loop:=False; 
closesocket(FSOCKET); 
WSACleanup; 
button4.enabled:=true; 
button5.enabled:=false; 
end; 
 
end.