~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
对Python感兴趣,工作之余,参照部分文档初步实现了HTTP/HTTPs代理。(代码比较凌乱,各位留情。)
使用Fiddler调试。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import socket
import time
import threading
BUFSIZE=1024
class Access_to_Host(object):
def handler(self,conn,addr):
self.conn=conn
self.addr=addr
all_src_data,hostname,port,ssl_flag=self.get_dst_host_from_header(self.conn,self.addr)
all_dst_data=self.get_data_from_host(hostname,port,all_src_data,ssl_flag)
if all_dst_data and not ssl_flag:
#self.send_data_to_client(self.conn,all_dst_data)
self.ssl_client_server_client(self.conn,self.conn_dst,all_dst_data)
elif ssl_flag:
sample_data_to_client=b"HTTP/1.0 200 Connection Established\r\n\r\n"
# print("\nSSL_Flag-1")
#self.send_data_to_client(self.conn,all_dst_data)
#print("SSL_Flag-2")
self.ssl_client_server_client(self.conn,self.conn_dst,sample_data_to_client)
#print("\nSSL_Flag-3")
else:
print('pls check network. cannot get hostname:'+hostname)
#self.conn.close()
def ssl_client_server(self,src_conn,dst_conn):
self.src_conn=src_conn
self.dst_conn=dst_conn
while True:
###get data from client
try:
ssl_client_data=self.src_conn.recv(BUFSIZE)
except Ex