#!/usr/bin/python3 -Wdefault FILENAME = 'uploadedfile' ADDRESS = '::' PORT = 8000 import threading from http.server import BaseHTTPRequestHandler, HTTPServer import http.client import hashlib import socket import readline class SimpleUploadServer(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(b""" <html> <head><title>Upload a File</title></head> <body> <h1>Upload a File</h1> <form method="POST" enctype="multipart/form-data"> <input type="file" name="file"><br><br> <input type="submit" value="Upload"> </form> </body> </html> """) def do_POST(self): content_length = int(self.headers['Content-Length']) body = self.rfile.read(content_length) delimiter = b'\r\n\r\n' delimiter_pos = body.find(delimiter) body = body[delimiter_pos + len(delimiter):] delimiter = b'\r\n' pos = len(body) - 3 while pos >= 0: if body[pos:pos + 2] == delimiter: body = body[:pos] break pos -= 1 with open(FILENAME, 'wb') as f: f.write(body) print(f"File saved as '{FILENAME}'.") sha512 = hashlib.sha512() sha512.update(body) checksum = sha512.hexdigest() print(f"Sha512sum:\n{checksum}") self.send_response(200) self.end_headers() self.wfile.write(f"File uploaded and saved! Sha512sum:\r\n{checksum}".encode('utf-8')) class ProperHTTPServer(HTTPServer): address_family = socket.AF_INET6 httpd = ProperHTTPServer((ADDRESS, PORT), SimpleUploadServer) print(f"Starting server on {ADDRESS}:{PORT}") threading.Thread(target=httpd.serve_forever).start() input("send local IP to qrcode.show?") connection = http.client.HTTPSConnection("qrcode.show") connection.connect() ip = connection.sock.getsockname()[0] if connection.sock.family == socket.AF_INET6: ip = f"[{ip}]" link = f"http://{ip}:{PORT}" readline.set_startup_hook(lambda: readline.insert_text(link)) link = input("confirm link: ") connection.request('GET', f"/{link}") print(connection.getresponse().read().decode()) connection.close() # tail -n 2 | base64 -di | gunzip """ H4sIABDl2WYCA5VWW2/bNhR+1684VR8kobbkpGtRCHGGrE3WAF0bxB72kBgGbVIREepSikqaefnvO4eSbEvOhk2AYOrcz8dz8etXUV3paCXzqHwyaZG/hfEfXCSsVsa5uPxy/vXst3OYgleXqmBc8EQq4Tlnnz5dn89mxIhjz7n6dj3H84fJZOI4MisLbcCkWjAu8zsn0UUGqTFlWAn9IDS0Er+wSnyez6+uxfdaVOYzy7kSegREm1nJzpZVXispcrMlsSpVctV9VsX6XmyZ5FnJXDjOWrGqghnSlfjdptBY9l92HsSOA/ggAsCL5a/nc78SKkEytA99Yh45X2pRlUVeCf94Mgle4KcYBDpyPxa5wcDH5qkU7ghcI36YKDWZcgdaO6XKH7AeCfbwUUsj/JXrulsuPSdk7HRAQjunJ0YaJU6bvIHBBRo5iRriSWRF+lqrgj8NDR0N9ZHSF0kKnUEmsHr41L36Npu7IPI1pTt1M6wjWTJtIpIac2aYO1CXeVljuVhxStOFnGXd+fRkpe37zzpVvcqkceGBqRo/m2iHTqz7Ie2FdKM+lgh10KsISm9YEuvmgpdK5HcmxT6QubEyYXubN15XA1+siLfYXS/FgCpWXNtbpuL1+zZ34lwoidliE01h5d3q25xe75C/LIuKZNB8mMic+1vOgW/6uekrvgF0vKcSL/4lgp33xiepks0AxvB2y3tMMTkrcTqFSdyDXSZNEMiNG/fHC5hOd7764sPYSWdxKIFA3veoZHo8haNdTBLvqygx3m7UjcB7XHkBsAqSvtOkaz/KbJexpstOXGoNqNiD4KTqbTp7z17YVZBt5pS9OzrGuNvxFTaE/Xa3hLAusVWGztapWN9XdUb10oil4geXdzi//MOQZlYExePbfNOpPrvB/xtl/3EotQh0WwJwnDZwvIK9OHQvErS9Lrjwvdok4w9eEHTj+krjnejdGvB3x7btGOcYc7VMWCaV7R87/8Ozi+Xl1/P5e8ehlcGRcWDLb3fXCGhrBaM XlkPgbDE0OLpwh0G7uYocNq3+c7whAwTodtWFc3vyUetOmKmNoVl6S5w/gkyHFZlEKO0I813CH1SxZgour8AU8F0TKFgYxePPaBsHQS7WRqLn6f4eDG1KH7dc391T7OmF7ZF8lmhkj0OohRgp/dLQ9YObycLBbhzKdDgfAN1ch7WbuDcbWT4vXAdX770lULxxFBG5Q8vpdjPiYpYWjLpcpkVx7yuWrTiLt9s7lFiS2ixpYfpkEyukNd2Ch2EmEpcPUWPoZ62bxe57uMS9EQYTbUiM7qu53T1ZhGDbAkEzgIOQC1udQR9LVZCM47wGw6SCcQ7H8Bes8N/E+59gzCV+3NX5n7J0/gbifKfBWwkAAA=="""