1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| import socket import threading import time
class Proxy: def __init__(self): self.client_addr = None self.recv_client = None self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.buffsize = 4096 self.client_socket.bind(("0.0.0.0", 11111)) self.client_socket.listen(10) self.Host = None self.Server_address = None self.file_target = None
def accept_client_socket(self): self.recv_client, self.client_addr = self.client_socket.accept()
def tackle_client_message(self): print(threading.currentThread()) print("从这个套接字接收过来了:{}".format(self.client_addr)) while True: request = self.recv_client.recv(self.buffsize).decode('utf-8') if request: print('request timestamp:' + time.strftime("%Y-%m-%d %X", time.localtime())) header = request.split("\r\n\r\n")[0] message = request.split('\r\n\r\n')[1] print(header)
key_header = {} self.file_target = header.split('\r\n')[0] print(self.file_target) for single_header in header.split('\r\n'): key = single_header.split(':')[0] value = single_header.split(':')[1] if value == None: continue key_header[key] = value self.Host = key_header['Host'] port = 80 self.back_to_client(self.connect_server()) else: break self.recv_client.close() print("关闭了暂时{}的接收".format(self.client_addr))
def connect_server(self): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
(fam, type, _, _, server_address) = socket.getaddrinfo(self.Host.strip(), 80)[0] print(server_address) server_socket.connect(server_address) response = b'' recv_msg = b'' while True: msg = "{}\r\nhost:{}\r\nConnection: close\r\n\r\n".format(self.file_target, self.Host.strip()) server_socket.send(msg.encode('utf-8')) print("已发送到服务器") recv_msg, address = server_socket.recvfrom(4096) print("服务器回应") response += recv_msg time.sleep(1) if recv_msg == b'': break try: print(response.decode('utf-8')) except Exception as e: pass return response
def back_to_client(self, recv_msg): self.recv_client.send(recv_msg) print("发送到客户端")
def run(self): while True: self.accept_client_socket() thread_1 = threading.Thread(target=self.tackle_client_message()) thread_1.start()
|