В общем, дело такое, пишу простенький socks5 сервер.
Всё работает в идеале, шлётся туда-обратно до единого байта, грузятся сайты, но одна проблема - не грузятся сайты по https.
Прошу объяснить, в чём моя ошибка. Код прилагается.
На качество кода прошу не смотреть, нет обработчиков ошибок, многих функций протокола - позже оптимизирую и доделаю. (или в этом и есть всё дело?)
import socket, ipaddress, threading from struct import unpack def socks5server(): client = socket.socket() client.bind(('', 9050)) client.listen(100) while True: conn, add = client.accept() th = threading.Thread(name="socks5", target=socks5, args=(conn, add)) th.start() client.close def socks5(c, ad): #с - сокет, ad - адрес ip = '' ipbytes = [] print("\nConnection from "+str(ad[0]), end=" ") hellop = c.recv(512) #hello packet from client if hellop[0] != 5 or hellop[1] != 1 or hellop[2] != 0: c.close() return c.send(bytes([5, 0])) #hello packet from me comm = c.recv(512) #command from client if comm[3] == 1: #здесь я проверяю, ipv4 или ipv6 адрес был предоставлен для коннекта ipbytes = comm[4:8] ip = '.'.join([str(i) for i in comm if i > 5][0:4]) elif comm[3] == 4: print('ipv6 connection registered.') ipbytes = comm[5:21] ip = ipaddress.IPv6Address(comm[5:21]) port = int(unpack('>H', comm[len(comm)-2:len(comm)])[0]) #здесь вытаскиваем порт print("to "+str(ip)+':'+str(port)) c.send(bytes([5,0,0])+comm[3:4]+ipbytes+comm[len(comm)-2:len(comm)]) #request from me ask = c.recv(8192) dest = None if comm[3] == 4: dest = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) #здесь опять же, настраиваем коннекшн, по ipv4 или ipv6 он будет происходить dest.connect((str(ip), port)) elif comm[3] == 1: dest = socket.socket() dest.connect((ip, port)) dest.send(ask) while True: rpl = dest.recv(4096) if len(rpl)>0: c.send(rpl) else: break dest.close() c.close() if __name__ == "__main__": socks5server()
Кстати, ещё вопрос! Загружаю я сайт по http, он полностью прогрузился, но на вкладке в браузере продолжается бесконечная загрузка. Чем это может быть вызвано?
Благодарю всех кто не пройдёт мимо!