Asynchronous P2P networking library and service


Keywords
NAT, traversal, TCP, hole, punching, simultaneous, open, UPnP, STUN, TURN, SIP, DHCP, add, IP, to, interface, NATPMP, P2P, Peer-to-peer, networking, library, python
License
Unlicense
Install
pip install p2pd==2.4.0

Documentation

P2PD

[Coverage >= 82%] [Python >= 3.6] [Mac, Win, Nix, BSD, Android]

P2PD is a new async networking library for Python. It's based on solving some of the problems with Python's existing APIs and supports P2P networking among other features.

Installation

On non-windows systems make sure you have gcc and python3-devel installed.

python3 -m pip install p2pd

Documentation

https://p2pd.readthedocs.io/

Features

P2PD is a new project aiming to make peer-to-peer networking simple and ubiquitous. P2PD can be used either as a library or as a service. As a library P2PD is written in Python 3 using asyncio for everything. As a service P2PD provides a REST API on http://127.0.0.1:12333/. The REST API is provided for non-Python languages.

P2PD offers engineers the following features:

  • Multiple strategies for establishing peer-to-peer direct connections.

    • Direct connect = Connect to a reachable node.
    • Reverse connect = Tell a node to connect to you.
    • TCP hole punching = Simultaneous TCP connections.
    • TURN = Use a proxy server as a last resort.
  • Advanced NAT detection. P2PD can detect 7 different types of NATs and 5 different sub-types for a combined total of 35 unique NAT configurations. The result is better NAT bypass.

  • Smart TCP hole punching. The TCP hole punching algorithm has been designed to require minimal communication between peers to increase the chances of success. The algorithm supports a diverse number of NAT configurations for the best results possible.

  • Port forwarding (IPv4) and pin hole (IPv6.) Automatically handles opening ports on the router to increase reachability.

  • IPv6 ready from day 1. Supports IPv4 and IPv6. Introduces a new format for addresses that offers insight into a peer's NIC cards, internal network, and NAT devices.

  • A new way to do network programming. Focuses on NICs as the starting point for building services. Introduces 'routes' as a way to provide visibility into external addresses. You can build services that support IPv4, IPv6, TCP, and UDP without writing different code for each of them.

  • Language-agnostic REST API. You can call /p2p/open/name/addr then /p2p/pipe/name to turn any HTTP connection into a two-way relay between a peer-to-peer connection.

  • Minimal dependencies. Most of the code in P2PD uses the Python standard library to improve portability and reduce packaging issues.

  • Built on open protocols. P2PD uses IRC as a name system, STUN for address lookups, MQTT for signaling messages, and TURN for last resort message relaying. All of these protocols have public infrastructure.