Ich versuche, mit einem ElectrumX-Server mit JSON-RPC über TLS, aber über Tor (SOCKS-Proxy auf localhost) zu sprechen.Wie verwende ich asyncio.sslproto.SSLProtocol?
Beim Ausführen des folgenden Codes ruft drain()
in asyncio.streams
_drain_helper
in SSLProtocol, die ich nicht implementieren kann.
Wenn ich es nur ein No-Op mache, scheint es nicht zu funktionieren.
Ich weiß, dass das JSON-RPC-Server arbeiten, weil ich mit
echo -ne '{"id":0,"args":["3.0.2","1.1"],"method":"server.version"}\n' | socat stdio openssl-connect:songbird.bauerj.eu:50002,verify=0
Mein Versuch getestet haben bei TLS durch SOCKS in Python mit asyncio mit:
from asyncio.sslproto import SSLProtocol
import aiosocks
import asyncio
loop = None
class MySSLProtocol(SSLProtocol):
def __init__(otherself):
super().__init__(loop, None, False , None)
# app_proto context waiter
async def l(fut):
try:
socks4addr = aiosocks.Socks4Addr("127.0.0.1", 9050)
transport, protocol = await aiosocks.create_connection(MySSLProtocol, proxy=socks4addr, proxy_auth=None, dst=("songbird.bauerj.eu", 50002))
reader = asyncio.StreamReader()
reader.set_transport(transport)
writer = asyncio.StreamWriter(transport, protocol, reader, loop)
writer.write(b'{"id":0,"method":"server.version","args":["3.0.2", "1.1"]}\n')
await writer.drain()
print(await reader.readuntil(b"\n"))
fut.set_result("finished")
except BaseException as e:
fut.set_exception(e)
def f():
global loop
loop = asyncio.get_event_loop()
fut = asyncio.Future()
asyncio.ensure_future(l(fut))
loop.run_until_complete(fut)
print(fut.result())
loop.close()
f()
ich verwende aiosocks
aus Meister. Commit 932374c
Wie gesagt, ich möchte SSL in SOCKS getunnelt verwenden. Wenn SSL an create_connection übergeben wird, bekomme ich eine SSL-verschlüsselte SOCKS-Verbindung, ich möchte es umgekehrt. Wenn Sie nicht glauben, dass SSLProtocol die geeignete Lösung ist, zeigen Sie mir, wie Sie SSL in SOCKS ohne es tun können. –