2017-12-07 8 views
0

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

答えて

-1

asyncio.sslprotoSSLProtocolはasyncioプライベートAPIの一部です。

クラスを直接使用したり、クラスから派生させたりしないでください。 SSLでの作業について

loop.create_connection()/loop.create_server()に正常(asyncio.Protocol由来)プロトコルとssl.SSLContextsslとしてPARAMを通過してください。

+0

前述の通り、SOCKSでSSLトンネルを使用したいと考えています。 SSLをcreate_connectionに渡すと、私はSSLで暗号化されたSOCKS接続を取得できます。 SSLProtocolが適切な解決策ではないと思われる場合は、SSLなしでSOCKSでSSLを実行する方法を教えてください。 –

関連する問題