代理服务器转发请求时遇连接重置、400错误的问题求助
代理服务器转发请求时遇连接重置、400错误的问题求助
我想在VDS上搭建代理服务器,本地电脑设置代理后,通过远端服务器的脚本处理并转发请求。但在转发请求到google.com或youtube.com这类网站时遇到了麻烦:
- 本地运行程序(监听
127.0.0.1:65432)会触发error [WinError 10054]错误 - 在VDS上运行则会出现
[Errno 104] Connection reset by peer错误
而且不管哪种情况,从目标网站都会收到400错误的响应。
相关配置截图
- Proxy设置:

- VPS相关配置:

- 本地相关配置:

我的代码
我已经修改过很多次了(毕竟刚入门,犯了不少错,但这个问题实在搞不定):
import socket import sys import threading HOST = "127.0.0.1" # Standard loopback interface address (localhost) PORT = 65432 # Port to listen on (non-privileged ports are > 1023) BUFFER_SIZE = 10000 def main(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((HOST, PORT)) s.listen(10) print(f"Подняли сервер на порту: {PORT}") while True: try: conn, addr = s.accept() d = threading.Thread(target=conn_string, args=(conn, addr)) d.setDaemon(True) d.start() except Exception as e: print(e) sys.exit(1) s.close() def conn_string(conn, addr): try: data = conn.recv(BUFFER_SIZE) #print(f"Connection: {conn}") server = data.decode("utf-8") first_line = server.split('\n')[0] url = first_line.split(" ")[1] http_pos = url.find("://") if http_pos==-1: temp=url else: temp = url[(http_pos+3):] port_pos = temp.find(":") webserver_pos = temp.find("/") if webserver_pos == -1: webserver_pos = len(temp) webserver ="" port = -1 if (port_pos == -1 or webserver_pos < port_pos): port = 80 webserver = temp[:webserver_pos] else: port = int((temp[(port_pos+1):])[:webserver_pos-port_pos-1]) webserver = temp[:port_pos] decode_data = decode(data) #print(f"Address: {addr}") #print(f"Data: {data}") #print(f"Webserver: {webserver}") proxy_server(webserver, port, conn, addr, decode_data) except Exception as e: print(e) conn.close() sys.exit(2) def decode(data): return bytes(data) def get_vpn(): return ("127.0.0.1", 12345) def proxy_server(url, host_port, conn, addr, decode_data): print(url, host_port) client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.settimeout(60.0) client.connect((url, int(host_port))) client.send(decode_data) while True: response = client.recv(BUFFER_SIZE) print(response.decode('utf-8')) if len(response.decode('utf-8')) > 0: conn.send(response) dar = float(len(response)) dar = float(dar/1024) dar = f"{dar} KB" print(f"[*] Requests Done: {addr[0]} => {dar} <=") else: break print(f"Закрыл соединение с {url}") client.close() conn.close() main()
备注:内容来源于stack exchange,提问作者ррово
相关产品推荐
相关产品推荐

