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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| import re import socket import _thread import os import re import os.path
class Proxy: def __init__(self): 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.client_socket.bind(("0.0.0.0", 11111)); self.client_socket.listen(10) self.Host = None self.Server_address = None
def change_coming_data(self, message): if os.path.exists('output.html'): os.remove('output.html') print("已删除原输出文件") f = open('output.html', "wb+") print("找到要过滤的字符") f.write(message.decode('utf-8').replace("首页", '').encode('utf-8')) print("已写入修改新响应消息") f.close() print("已关闭新写入文件,并且读取修改完毕的内容。") return message
def back_to_client(self): goto_html = socket.socket(socket.AF_INET, socket.SOCK_STREAM) goto_html.bind(("127.0.0.1", 8081)) goto_html.listen(10) while True: conn, addr = goto_html.accept() msg = conn.recv(65536) print(conn) file_html = open("output.html", "rb+") data = file_html.read() conn.sendall(data) print("成功返回服务器") conn.close()
def accept_client(self): self.recv_client, client_addr = self.client_socket.accept() print(client_addr) request = self.recv_client.recv(65536).decode('utf-8') header = request.split("\r\n\r\n")[0] message = request.split('\r\n\r\n')[1]; 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'] port = 80;
def connect_server(self): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 60 * 1000, 30 * 1000)) (fam, type, _, _, server_address) = socket.getaddrinfo(self.Host.strip(), 80)[0] print(server_address) server_socket.connect(server_address) while True: msg = "GET / HTTP/1.1\r\nhost:{}\r\nConnection: close\r\n\r\n".format( self.Host.strip()) server_socket.send(msg.encode('utf-8')) recv_msg, address = server_socket.recvfrom(4096) try: print(recv_msg.decode('utf-8')) except Exception as e: pass
while input() == 'b': self.change_coming_data(recv_msg) while input() == 's': self.back_to_client()
def run(self): while True: self.accept_client() while input() == 'a': self.connect_server()
|