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.

Files for i2plib, version 0.0.4
Filename, size File type Python version Upload date Hashes
Filename, size i2plib-0.0.4.tar.gz (9.0 kB) File type Source Python version None Upload date Hashes View
Filename, size i2plib-0.0.4-py3-none-any.whl (10.3 kB) File type Wheel Python version py3 Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page