Я хочу выполнить tcp-запрос, используя прокси SOCKS5. Я использую пакеты asyncio
и aiosocks
и версию python3.7 в Ubuntu 16.04.
Вот мой код
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
future_connection = aiosocks.open_connection(
proxy=aiosocks.Socks5Addr("127.0.0.1", 1080),
proxy_auth=aiosocks.Socks5Auth("login", "password"),
dst=("192.168.0.101", 8443),
ssl=ssl_context,
remote_resolve=True)
reader, writer = await asyncio.wait_for(future_connection, timeout=self.connection_timeout)
writer.write(b"Hello Message\r\n\r\n")
tcp_data = await asyncio.wait_for(reader.read(1024000), timeout=self.request_timeout)
Но у меня следующая ошибка:
SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x7fd923f54c18
transport: <_SelectorSocketTransport fd=6 read=polling write=<idle, bufsize=0
Traceback (most recent call last):
File "/usr/lib/python3.7/asyncio/sslproto.py", line 526, in data_received
ssldata, appdata = self._sslpipe.feed_ssldata(data)
File "/usr/lib/python3.7/asyncio/sslproto.py", line 200, in feed_ssldata
chunk = self._sslobj.read(self.max_size)
File "/usr/lib/python3.7/ssl.py", line 707, in read
v = self._sslobj.read(len)
ssl.SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:2460)
Также я попытался обновить пакет openssl, моя текущая версия
python3.7 -c "import ssl; print( ssl.OPENSSL_VERSION)"
OpenSSL 1.0.2g 1 Mar 2016
Также код без aiosocks
хорошо работает
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
future_connection = asyncio.open_connection("192.168.0.101", 8443, ssl=ssl_context)
reader, writer = await asyncio.wait_for(future_connection, timeout=self.connection_timeout)
writer.write(b"Hello Message\r\n\r\n")
tcp_data = await asyncio.wait_for(reader.read(1024000), timeout=self.request_timeout)
Но я пробовал несколько прокси-серверов с одинаковой ошибкой.
Также aiosocks
на python3.6 не работает с SSL-соединением из-за этой ошибки https://bugs.python.org/issue23749.
Итак, как я могу получить ответ TCP через SOCKS5, используя asyncio
?