from flask import Flask, request, render_template_string import socket import threading import html
app = Flask(__name__)
@app.route('/', methods=["GET"]) def source(): with open(__file__, 'r', encoding='utf-8') as f: return '<pre>'+html.escape(f.read())+'</pre>'
@app.route('/', methods=["POST"]) def template(): template_code = request.form.get("code") # 安全过滤 blacklist = ['__', 'import', 'os', 'sys', 'eval', 'subprocess', 'popen', 'system', '\r', '\n'] for black in blacklist: if black in template_code: return "Forbidden content detected!" result = render_template_string(template_code) print(result) return 'ok' if result is not None else 'error'
def handle_request(self, client_socket): try: request_data = b"" while True: chunk = client_socket.recv(4096) request_data += chunk if len(chunk) < 4096: break
if not request_data: client_socket.close() return
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as proxy_socket: proxy_socket.connect((self.target_host, self.target_port)) proxy_socket.sendall(request_data)
response_data = b"" while True: chunk = proxy_socket.recv(4096) if not chunk: break response_data += chunk
header_end = response_data.rfind(b"\r\n\r\n") if header_end != -1: body = response_data[header_end + 4:] else: body = response_data response_body = body response = b"HTTP/1.1 200 OK\r\n" \ b"Content-Length: " + str(len(response_body)).encode() + b"\r\n" \ b"Content-Type: text/html; charset=utf-8\r\n" \ b"\r\n" + response_body
client_socket.sendall(response) except Exception as e: print(f"Proxy Error: {e}") finally: client_socket.close()
def start_proxy_server(host, port, target_host, target_port): proxy_handler = HTTPProxyHandler(target_host, target_port) server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((host, port)) server_socket.listen(100) print(f"Proxy server is running on {host}:{port} and forwarding to {target_host}:{target_port}...")
try: while True: client_socket, addr = server_socket.accept() print(f"Connection from {addr}") thread = threading.Thread(target=proxy_handler.handle_request, args=(client_socket,)) thread.daemon = True thread.start() except KeyboardInterrupt: print("Shutting down proxy server...") finally: server_socket.close()