pyquickshare
An asynchronous Python implementation of the Android Quick Share (Nearby Share) protocol
System requirements
pyquickshare has following expectations from the system:
- some mDNS implementation (avahi, systemd-resolved, etc.)
- Bluetooth stack using BlueZ reachable via D-Bus
As these are de-facto standards on Linux, pyquickshare should work on most Linux distributions.
Firewalls
As Quick Share uses a direct connection between devices, it is necessary to allow incoming connections on the advertised port. firewalld is supported out of the box (but not required).
pyquickshare temporarily reconfigures firewalld (if available) to accept an incoming connection on it's advertised port.
This is done by adding a temporary rule to the currently "active" zone.
This rule is automatically removed by firewalld after 5 minutes.
Communication with firewalld is done over D-Bus, polkit may prompt for authentication.
Installation
pip install pyquickshare
# or, to install with extras (QR code support)
pip install pyquickshare[extras]
Features
Receive is fully implemented, namely WiFi credentials, files, and text. Sending only supports files, but support for sending text and WiFi credentials is planned.
Transfer
Only LAN/Wifi is supported at the moment, but Bluetooth is planned.
Discovery
pyquickshare uses mDNS to discover other devices on the local network. BLE is only used to trigger advertisment at the moment.
Usage
example.py is a basic example of how to use pyquickshare. It provides a command line interface to send and receive files using Quick Share:
uv run example.py receive
uv run example.py send <file>
Notes and Acknowledgements
-
The code in
pyquickshare/protosis generated from protobuf sources licensed under Apache 2.0. As a derivative work, these generated files remain under the original Apache 2.0 license. A copy of the original license can be found in thepyquickshare/protosdirectory. -
This project would not have been possible without the amazing reverse engineering work done by grishka on the Quick Share protocol. Check out NearDrop, a similar project for Mac OS.
-
WiFi-Direct: While according to Google's Nearby documentation and the protobuf fields WiFi-Direct is supposed to be an available medium, it seems that Quick Share does not use it. It more likely uses WiFi-Aware which isn't widely supported outside of Android devices.
Metadata
Release files for pyquickshare 0.1.0.post1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pyquickshare-0.1.0.post1.tar.gz | 92.7 kB | Without provenance | Details for pyquickshare-0.1.0.post1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pyquickshare-0.1.0.post1-py3-none-any.whl | Python 3 | none | any | Details for pyquickshare-0.1.0.post1-py3-none-any.whl |
Total release size: 163.9 kB
Security for pyquickshare 0.1.0.post1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.