JSON-RPC over TLSを使用してElectrumXサーバーと通信しようとしていますが、Tor(ローカルホストのSOCKSプロキシ)を使用しています。asyncio.sslproto.SSLProtocolを使用するにはどうすればよいですか?
drain()
をasyncio.streams
に設定するとSSLProtocolでが呼び出されますが、実装方法はわかりません。
これをノーオペレーションにしても、動作しないようです。
私はasyncioとPythonでSOCKS経由TLSを使用しての
echo -ne '{"id":0,"args":["3.0.2","1.1"],"method":"server.version"}\n' | socat stdio openssl-connect:songbird.bauerj.eu:50002,verify=0
私の試みでテストしているので、私はJSON-RPCサーバーが動作していることを知っている:私はからaiosocks
を使用しています
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()
マスター。コミット932374c
前述の通り、SOCKSでSSLトンネルを使用したいと考えています。 SSLをcreate_connectionに渡すと、私はSSLで暗号化されたSOCKS接続を取得できます。 SSLProtocolが適切な解決策ではないと思われる場合は、SSLなしでSOCKSでSSLを実行する方法を教えてください。 –