Skip to main content

A modern asynchronous library for building I2P applications.

Project description

i2plib
======

A modern asynchronous library for building I2P applications.

Installing
----------

pip install i2plib

Requirements:

- Python version >= 3.5
- I2P router with SAM API enabled

Quick start
-----------

**Connecting to a remote I2P destination:**

```python3
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:**

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

Tunnel API
----------

**Expose a local service to I2P like that:**

```python3
import asyncio
import i2plib

loop = asyncio.get_event_loop()
# making your local web server available in the I2P network
asyncio.ensure_future(i2plib.server_tunnel(("127.0.0.1", 80)))

try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
loop.close()
```

**Bind a remote I2P destination to a port on your local host:**

```python3
import asyncio
import i2plib

loop = asyncio.get_event_loop()
# bind irc.echelon.i2p to 127.0.0.1:6669
asyncio.ensure_future(i2plib.client_tunnel(("127.0.0.1", 6669), "irc.echelon.i2p"))

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.

External links
--------------

* [Invisible Internet Project](https://geti2p.net/en/)
* [SAM API documentation](https://geti2p.net/en/docs/api/samv3)
* [Python asyncio documentation](https://docs.python.org/3/library/asyncio.html)


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.3.tar.gz (9.0 kB view hashes)

Uploaded Source

Built Distribution

i2plib-0.0.3-py3-none-any.whl (10.3 kB view hashes)

Uploaded Python 3

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