Metadata-Version: 2.1
Name: p2pd
Version: 2.8.0
Summary: Asynchronous P2P networking library and service
Home-page: http://github.com/robertsdotpm/p2pd
Author: Matthew Roberts
Author-email: matthew@roberts.pm
License: public domain
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
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Description-Content-Type: text/markdown
License-File: LICENSE

# 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.

