Форум программистов, компьютерный форум CyberForum.ru

Python: Сети

Войти
Регистрация
Восстановить пароль
 
beginnerxxas
0 / 0 / 0
Регистрация: 17.12.2013
Сообщений: 10
#1

Socks5 сервер и https - Python

01.06.2016, 01:21. Просмотров 627. Ответов 0
Метки нет (Все метки)

Добрый день!

В общем, дело такое, пишу простенький socks5 сервер.
Всё работает в идеале, шлётся туда-обратно до единого байта, грузятся сайты, но одна проблема - не грузятся сайты по https.

Прошу объяснить, в чём моя ошибка. Код прилагается.
На качество кода прошу не смотреть, нет обработчиков ошибок, многих функций протокола - позже оптимизирую и доделаю. (или в этом и есть всё дело?)

Кликните здесь для просмотра всего текста
Python
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
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, он полностью прогрузился, но на вкладке продолжается бесконечная загрузка. Чем это может быть вызвано?

Благодарю всех кто не пройдёт мимо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2016, 01:21     Socks5 сервер и https
Посмотрите здесь:

Socks5 прокси сервер C++
Закачка файла на www сервер по http/https Visual Basic
C# WPF Перевести сервер HTTP на HTTPS
C# HTTPS прокси сервер: нужно расшифровать запрос от браузера
Сети Глючит socks5-сервер
Python Вещание данных в сеть (сервер) - что читать?
Python Сервер
JavaSE, HTTP, HTTPS сервер Java SE
Python Сервер/клиент python3, закрытие сокета по CTRL+C
Python Как осуществить загрузку файлов на сервер cgi?
Прокси-сервер для работы с HTTPS

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru