Skip to main content

A modern asynchronous library for building I2P applications.

Project description

https://travis-ci.com/l-n-s/i2plib.svg?branch=master Latest Read The Docs https://codecov.io/github/l-n-s/i2plib/coverage.svg?branch=master

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())

    # close the connection
    writer.close()

# 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
    dest = await reader.readline()
    remote_destination = i2plib.Destination(dest.decode().strip())

    # read for the actual incoming data from the client
    data = await reader.read(4096)

    print(data.decode())

    # send data back
    writer.write(b"PONG")

    # close the connection
    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


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.14.tar.gz (14.6 kB view details)

Uploaded Source

Built Distribution

i2plib-0.0.14-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file i2plib-0.0.14.tar.gz.

File metadata

  • Download URL: i2plib-0.0.14.tar.gz
  • Upload date:
  • Size: 14.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.6.5

File hashes

Hashes for i2plib-0.0.14.tar.gz
Algorithm Hash digest
SHA256 68ea06cec53759e462ad4ee8c74f1fed5f39c1c3a3fbbbd83bf1ed2ef85d657a
MD5 91f2496b33886803158cea98dfb1f5c2
BLAKE2b-256 93196d70d9c0352ea1e88fd988ca3d11325d235503eec9b90a2a9cf85c2e137b

See more details on using hashes here.

File details

Details for the file i2plib-0.0.14-py3-none-any.whl.

File metadata

  • Download URL: i2plib-0.0.14-py3-none-any.whl
  • Upload date:
  • Size: 10.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.25.0 CPython/3.6.5

File hashes

Hashes for i2plib-0.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 98147edda01196b8b0cec1414f1a53b08f87564bfeea652dd47339711b51c13b
MD5 61e7753d885c95071696742b393437bf
BLAKE2b-256 de2b42ff78fd80062fada1344fe5a5a58d3bd308c571a9a9ccb9592a423a1239

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page