A modern asynchronous library for building I2P applications.
Project description
i2plib is a modern asynchronous library for building I2P applications.
Installing
pip install i2plib
Requirements:
Python version >= 3.5
I2P router with SAM API enabled
Connecting to a remote I2P destination
import asyncio import i2plib async def connect_test(destination): session_name = "test-connect" # create a SAM stream session await i2plib.create_session(session_name) # connect to a destination reader, writer = await i2plib.stream_connect(session_name, destination) # write data to a socket writer.write(b"PING") # asynchronously receive data data = await reader.read(4096) print(data.decode()) # run event loop loop = asyncio.get_event_loop() loop.run_until_complete(connect_test("dummy.i2p")) loop.stop()
Accept connections in I2P
import asyncio import i2plib async def accept_test(): session_name = "test-accept" # create a SAM stream session await i2plib.create_session(session_name) # accept a connection reader, writer = await i2plib.stream_accept(session_name) # first string on a client connection always contains clients I2P destination incoming = await reader.read(4096) dest, data = incoming.split(b"\n", 1) remote_destination = i2plib.Destination(dest.decode()) # destination and data may come in one chunck, if not - we wait for the actual # incoming data if not data: data = await reader.read(4096) print(data.decode()) # send data to the client writer.write(b"PONG") writer.close() # run event loop loop = asyncio.get_event_loop() loop.run_until_complete(accept_test()) loop.stop()
Server tunnel
Expose a local service to I2P like that:
import asyncio import i2plib loop = asyncio.get_event_loop() # making your local web server available in the I2P network tunnel = i2plib.ServerTunnel(("127.0.0.1", 80)) asyncio.ensure_future(tunnel.run()) try: loop.run_forever() except KeyboardInterrupt: pass finally: loop.close()
Client tunnel
Bind a remote I2P destination to a port on your local host:
import asyncio import i2plib loop = asyncio.get_event_loop() # bind irc.echelon.i2p to 127.0.0.1:6669 tunnel = i2plib.ClientTunnel("irc.echelon.i2p", ("127.0.0.1", 6669)) asyncio.ensure_future(tunnel.run()) try: loop.run_forever() except KeyboardInterrupt: pass finally: loop.close()
More examples
You can see more demo applications in docs/examples directory of the source repository.
Resources
Aknowledgments
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
i2plib-0.0.10.tar.gz
(10.3 kB
view hashes)
Built Distribution
i2plib-0.0.10-py3-none-any.whl
(11.1 kB
view hashes)