This commit is contained in:
xrando 2023-11-01 12:00:59 +08:00
commit 7be1d1939b
2 changed files with 68 additions and 39 deletions

View File

@ -38,7 +38,7 @@ services:
- dbnet - dbnet
frontend: frontend:
image: itsmexrando/safeshare-frontend:latest image: amusement3004/safeshare-frontend:latest
restart: restart:
always always
ports: ports:

View File

@ -1,36 +1,46 @@
import requests
import io
import os
import concurrent.futures import concurrent.futures
import io
import random import random
import string import string
import requests
# Endpoint # Endpoint
endpoint_url = "http://13.212.84.67:8000/api/files/" endpoint_url = "http://IP:PORT/api/files/" # Change IP and PORT as needed
# Number of files to send # Number of files to send
num_files = 3 num_files = 3
num_threads = 5 # Change the number of threads as needed num_threads = 5 # Change the number of threads as needed
# Test file path
test_file_path = "/path/to/virus.exe"
# Function to generate random file content # Function to generate random file content
def generate_random_content(): def generate_random_content():
content_length = random.randint(1024, 20480) # Random content size between 1KB and 20KB content_length = random.randint(1024, 20480) # Random content size between 1KB and 20KB
return ''.join(random.choices(string.ascii_letters + string.digits, k=content_length)) return ''.join(random.choices(string.ascii_letters + string.digits, k=content_length))
# Function to send files in a thread and return the key # Function to send files in a thread and return the key
def send_files_thread(thread_id): def send_files_thread(thread_id, use_test_file=False):
keys = [] keys = []
for i in range(num_files): for i in range(num_files):
if use_test_file and i == 0:
# Send the test file
with open(test_file_path, 'rb') as test_file:
test_file_content = io.BytesIO(test_file.read())
files = {'file': ('shell_reverse.exe', test_file_content)}
else:
# Generate random file content # Generate random file content
content = generate_random_content() content = generate_random_content()
file_content = io.BytesIO(content.encode()) file_content = io.BytesIO(content.encode())
# Define the files dictionary for the POST request
files = {'file': ('file{}.txt'.format(i), file_content)} files = {'file': ('file{}.txt'.format(i), file_content)}
# Define any additional data you want to send with the request # Define any additional data you want to send with the request
data = {'ttl': 60} data = {'ttl': 60}
try:
# Make the POST request # Make the POST request
response = requests.post(endpoint_url, files=files, data=data) response = requests.post(endpoint_url, files=files, data=data)
@ -46,14 +56,21 @@ def send_files_thread(thread_id):
print(f"Thread {thread_id}: File {i} uploaded, but key not found in the response.") print(f"Thread {thread_id}: File {i} uploaded, but key not found in the response.")
else: else:
print(f"Thread {thread_id}: File {i} upload failed with status code {response.status_code}.") print(f"Thread {thread_id}: File {i} upload failed with status code {response.status_code}.")
except Exception as e:
print(f"Thread {thread_id}: An error occurred while sending file {i}: {str(e)}")
finally:
# Close the file content # Close the file content
if use_test_file:
test_file_content.close()
else:
file_content.close() file_content.close()
return keys return keys
# Function to receive files in a thread using the provided key # Function to receive files in a thread using the provided key
def receive_files_thread(thread_id, file_key): def receive_files_thread(thread_id, file_key):
try:
# Make the GET request to retrieve the file using the provided key # Make the GET request to retrieve the file using the provided key
response = requests.get(endpoint_url + file_key) response = requests.get(endpoint_url + file_key)
@ -62,12 +79,23 @@ def receive_files_thread(thread_id, file_key):
# Save or process the received file content here # Save or process the received file content here
print(f"Thread {thread_id}: File with key {file_key} received successfully.") print(f"Thread {thread_id}: File with key {file_key} received successfully.")
else: else:
print(f"Thread {thread_id}: File with key {file_key} retrieval failed with status code {response.status_code}.") print(
f"Thread {thread_id}: File with key {file_key} retrieval failed with status code {response.status_code}.")
except Exception as e:
print(f"Thread {thread_id}: An error occurred while receiving the file with key {file_key}: {str(e)}")
# Create and send/receive files using multiple threads # Create and send/receive files using multiple threads
with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor: with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:
# Select a random subset of threads to use the test file
use_test_file_threads = random.sample(range(num_threads), min(num_threads, num_files))
# Start multiple threads for sending files # Start multiple threads for sending files
send_futures = [executor.submit(send_files_thread, thread_id) for thread_id in range(num_threads)] send_futures = []
for thread_id in range(num_threads):
use_test_file = thread_id in use_test_file_threads
future = executor.submit(send_files_thread, thread_id, use_test_file)
send_futures.append(future)
# Retrieve the keys from the responses # Retrieve the keys from the responses
keys = [] keys = []
@ -75,7 +103,8 @@ with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor:
keys.extend(future.result()) keys.extend(future.result())
# Start multiple threads for receiving files using the obtained keys # Start multiple threads for receiving files using the obtained keys
receive_futures = [executor.submit(receive_files_thread, thread_id, file_key) for thread_id, file_key in enumerate(keys)] receive_futures = [executor.submit(receive_files_thread, thread_id, file_key) for thread_id, file_key in
enumerate(keys) if file_key]
# Wait for all receive threads to complete # Wait for all receive threads to complete
concurrent.futures.wait(receive_futures) concurrent.futures.wait(receive_futures)