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.
- 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
plink/
├── README.md
├── requirements.txt
├── setup.py
├── .gitignore
├── docs/
│ ├── API.md
│ ├── ARCHITECTURE.md
│ └── EXAMPLES.md
├── backend/
│ ├── __init__.py
│ ├── networking/
│ │ ├── __init__.py
│ │ ├── core/
│ │ │ ├── __init__.py
│ │ │ ├── connection_manager.py
│ │ │ ├── peer_discovery.py
│ │ ├── strategies/
│ │ │ ├── __init__.py
│ │ │ ├── direct_connection.py
│ │ │ ├── upnp_connection.py
│ │ │ ├── hole_punching.py
│ │ │ └── role_reversal.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── network_utils.py
│ │ └── port_scanner.py
│ └── cryptography/
│ ├── __init__.py
│ ├── core/
│ │ ├── __init__.py
│ │ ├── encryption.py
│ │ ├── key_exchange.py
│ │ └── hash_verification.py
│ ├── data/
│ │ ├── __init__.py
│ │ ├── chunk_manager.py
│ │ ├── metadata.py
│ │ └── compression.py
│ └── utils/
│ ├── __init__.py
│ ├── crypto_utils.py
│ └── random_generator.py
├── frontend/
├── __init__.py
├── cli/
│ ├── __init__.py
│ ├── argument_parser.py
│ ├── command_handler.py
│ └── output_formatter.py
│
└── config/
├── __init__.py
├── settings.py
- Python 3.8 or higher
- pip package manager
Sender:
plink send /path/to/file.txt
Receiver:
plink receive
Send with specific connection method:
plink send /path/to/file.txt --method upnp --port 8080
Receive with custom settings:
plink receive --output-dir /downloads --method hole-punch
plink send <file_path> [OPTIONS]
OPTIONS:
--method, -m Connection method (direct, upnp, hole-punch, role-reverse)
--port, -p Port number (default: 8080)
--encryption, -e Encryption method (aes256, chacha20)
--chunk-size, -c Chunk size in KB (default: 1024)
--compress Enable compression
--password Set transfer password
--timeout Connection timeout in seconds
--resume Resume interrupted transfer
--verify Verify file integrity after transfer
plink receive [OPTIONS]
OPTIONS:
--output-dir, -o Output directory (default: current directory)
--port, -p Port number (default: 8080)
--method, -m Preferred connection method
--password Transfer password
--auto-accept Automatically accept transfers
--max-size Maximum file size to accept (MB)
- Use Case: Same network, known IP addresses
- Advantages: Fastest, most reliable
- Requirements: Open ports, direct network access
- Use Case: Behind NAT with UPnP-enabled router
- Advantages: Automatic port forwarding
- Requirements: UPnP-enabled router
- Use Case: Both peers behind NAT
- Advantages: Works through most NAT configurations
- Requirements: STUN server access
- Use Case: Asymmetric NAT situations
- Advantages: Fallback when other methods fail
- Requirements: One peer with open connectivity
- Create a feature branch from
main
- Make virtual environments and install requirements.txt
- Make your changes with appropriate tests
- Update documentation and requirement.txt if needed
- Ensure all tests pass
- Submit pull request with clear description