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
| import socket import threading import requests
class Proxy: def __init__(self):
self.buffsize = 4096; self.clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM); self.clientSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1); self.clientSocket.bind(("0.0.0.0", 11111)); self.clientSocket.listen(10); self.Host = None self.server_address = None
def accept_client(self): recv_client, client_addr = self.clientSocket.accept() request = recv_client.recv(4096).decode('utf-8');
header = request.split('\r\n\r\n')[0]; print(header)
key_header = {} 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']; print(type(self.Host)) port = 80
def connect_server(self): proxy_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) proxy_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
(fam, type, _, _, server_address) = socket.getaddrinfo(self.Host.strip(), 80)[0];
print(server_address) proxy_socket.connect(server_address) while True: msg = 'GET / HTTP/1.1\r\nhost:{}\r\nConnection: close\r\n\r\n'.format(self.Host.strip()) proxy_socket.send(msg.encode('utf-8')) rec_msg, address = proxy_socket.recvfrom(4096) print(rec_msg.decode('utf-8'))
def run(self): self.accept_client() while True: self.connect_server()
|