用于构建i2p应用程序的现代异步库。
i2plib的Python项目详细描述
i2plib是用于构建i2p应用程序的现代异步库。
安装
pip install i2plib
要求:
- python版本=3.5
- 启用SAM API的I2P路由器
连接到远程I2P目标
importasyncioimporti2plibasyncdefconnect_test(destination):session_name="test-connect"# create a SAM stream sessionawaiti2plib.create_session(session_name)# connect to a destinationreader,writer=awaiti2plib.stream_connect(session_name,destination)# write data to a socketwriter.write(b"PING")# asynchronously receive datadata=awaitreader.read(4096)print(data.decode())# close the connectionwriter.close()# run event looploop=asyncio.get_event_loop()loop.run_until_complete(connect_test("dummy.i2p"))loop.stop()
接受I2P中的连接
importasyncioimporti2plibasyncdefaccept_test():session_name="test-accept"# create a SAM stream sessionawaiti2plib.create_session(session_name)# accept a connectionreader,writer=awaiti2plib.stream_accept(session_name)# first string on a client connection always contains clients I2P destinationdest=awaitreader.readline()remote_destination=i2plib.Destination(dest.decode().strip())# read for the actual incoming data from the clientdata=awaitreader.read(4096)print(data.decode())# send data backwriter.write(b"PONG")# close the connectionwriter.close()# run event looploop=asyncio.get_event_loop()loop.run_until_complete(accept_test())loop.stop()
服务器通道
向i2p公开本地服务,就像这样:
importasyncioimporti2plibloop=asyncio.get_event_loop()# making your local web server available in the I2P networktunnel=i2plib.ServerTunnel(("127.0.0.1",80))asyncio.ensure_future(tunnel.run())try:loop.run_forever()exceptKeyboardInterrupt:passfinally:loop.close()
客户端隧道
将远程I2P目标绑定到本地主机上的端口:
importasyncioimporti2plibloop=asyncio.get_event_loop()# bind irc.echelon.i2p to 127.0.0.1:6669tunnel=i2plib.ClientTunnel("irc.echelon.i2p",("127.0.0.1",6669))asyncio.ensure_future(tunnel.run())try:loop.run_forever()exceptKeyboardInterrupt:passfinally:loop.close()
更多示例
您可以在源存储库的docs/examples目录中看到更多演示应用程序