pluto-siege 2.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,187 @@
1
+ Metadata-Version: 2.4
2
+ Name: pluto_siege
3
+ Version: 2.0.1
4
+ Summary: PlutoSDR ISM-band RF capture and replay tool (433 MHz, 868 MHz, etc.).
5
+ Author: SketchTurnerDev
6
+ License-Expression: GPL-3.0-or-later
7
+ Project-URL: Homepage, https://github.com/SketchTurnerDev/pluto_siege
8
+ Project-URL: Repository, https://github.com/SketchTurnerDev/pluto_siege.git
9
+ Project-URL: Issues, https://github.com/SketchTurnerDev/pluto_siege/issues
10
+ Keywords: 433mhz,868mhz,adalm-pluto,pentesting,pluto-sdr,pluto-siege,plutosdr,plutosiege,python,radio-frequency,red-team,rf,rf-hacking,sdr,security-tools,sigmf,subghz,tui,wireless,wireless-security
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Environment :: Console :: Curses
14
+ Classifier: Topic :: Communications :: Ham Radio
15
+ Requires-Python: >=3.9
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE
18
+ Requires-Dist: pyadi-iio>=0.0.16
19
+ Requires-Dist: pylibiio<1.0
20
+ Requires-Dist: numpy>=1.20.0
21
+ Dynamic: license-file
22
+
23
+ <h1 align="center">PlutoSiege</h1>
24
+
25
+ <p align="center">
26
+ <strong>ISM-Band RF Capture & Replay Tool for PlutoSDR</strong>
27
+ </p>
28
+
29
+ <p align="center">
30
+ <a href="https://pypi.org/project/pluto_siege/"><img src="https://img.shields.io/pypi/v/pluto_siege?style=for-the-badge&logo=pypi&logoColor=white&color=blue" alt="PyPI"></a>
31
+ <img src="https://img.shields.io/badge/Python-3.9+-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python">
32
+ <img src="https://img.shields.io/badge/License-GPL--3.0-blueviolet.svg?style=for-the-badge" alt="License">
33
+ <img src="https://img.shields.io/badge/Hardware-ADALM--Pluto-0099FF?style=for-the-badge" alt="Hardware">
34
+ <img src="https://img.shields.io/badge/Format-SigMF-orange?style=for-the-badge" alt="SigMF">
35
+ </p>
36
+
37
+ <p align="center">
38
+ <img src="https://github.com/user-attachments/assets/967ccd8d-13ce-4795-80d5-c4c49010d6ba" alt="PlutoSiege Screenshot" width="100%">
39
+ </p>
40
+
41
+ > **REGULATORY DISCLAIMER**
42
+ > RF transmission is regulated by local authorities. Replay only signals you own or are permitted to transmit, into a dummy load or at the lowest power required.
43
+
44
+ ## About
45
+
46
+ **PlutoSiege** is a terminal application (TUI) for recording and replaying short ISM-band RF bursts (e.g. 433 MHz, 868 MHz) from car remotes, garage doors, doorbells, and wireless sensors.
47
+
48
+ Built for the **ADALM-Pluto (AD9363/AD9361)** SDR architecture, it saves recordings in standard **SigMF (Signal Metadata Format)** so they can be opened in other SDR tools like URH, IQEngine, GNU Radio, or Inspectrum.
49
+
50
+ ### Hardware Compatibility
51
+ Fully supports both official **Analog Devices ADALM-Pluto** hardware (Rev. B / Rev. C) and third-party clones/analogues based on the same AD9363/AD9361 transceivers (such as **Pluto Nano**, **Pluto Plus**, and other custom PlutoSDR boards).
52
+
53
+ ## Features
54
+
55
+ - **Level Metering**: Real-time dBFS level meter with saturation (`SAT!`) warning.
56
+ - **Threshold Detection**: Automated noise floor estimation or manual threshold setting.
57
+ - **Pre-Trigger Buffer**: Keeps a ring buffer of history before trigger so preambles are not missed.
58
+ - **SigMF Format**: Saves `.sigmf-meta` and `.sigmf-data` pairs.
59
+ - **GPS Geotagging**: Records precise coordinates in SigMF metadata via `gpsd` and displays geotags during replay.
60
+ - **Digital Loopback Test**: Built-in test screen to check hardware loopback and SNR.
61
+ - **Linux Native**: Built and optimized specifically for Linux environments (supports all major distribution families: Debian-based, RPM-based, Arch-based, etc.).
62
+
63
+ ## Installation
64
+
65
+ ### 1. System Drivers (libiio)
66
+ Install the required IIO system drivers for your distribution family:
67
+
68
+ **Debian-based (Ubuntu, Debian, Kali, Mint, etc.):**
69
+ ```bash
70
+ sudo apt update && sudo apt install -y libiio0 libiio-dev libiio-utils
71
+ ```
72
+
73
+ **RPM-based (Fedora, RHEL, CentOS, Rocky, etc.):**
74
+ ```bash
75
+ sudo dnf install -y libiio python3-iio libiio-utils
76
+ ```
77
+
78
+ **Arch-based (Arch Linux, Manjaro, etc.):**
79
+ ```bash
80
+ sudo pacman -S libiio
81
+ ```
82
+
83
+ ### 2. Optional: GPS Support (gpsd)
84
+ If you plan to use GPS geotagging for SigMF recordings, install the `gpsd` daemon and tools:
85
+
86
+ **Debian-based:**
87
+ ```bash
88
+ sudo apt install -y gpsd gpsd-clients
89
+ ```
90
+
91
+ **RPM-based:**
92
+ ```bash
93
+ sudo dnf install -y gpsd gpsd-clients
94
+ ```
95
+
96
+ **Arch-based:**
97
+ ```bash
98
+ sudo pacman -S gpsd
99
+ ```
100
+
101
+ > **Note:** Configure and start the `gpsd` service according to your specific GPS receiver hardware (USB dongle, UART module, Bluetooth, or virtual source) so that it listens on `127.0.0.1:2947`. Once running, enable GPS in PlutoSiege **Settings** (`Enable GPS (gpsd): yes`).
102
+
103
+ ### 3. Install & Run PlutoSiege
104
+
105
+ #### Option A: Via pip / pipx (Recommended)
106
+ Install directly from PyPI:
107
+ ```bash
108
+ pipx install pluto_siege
109
+ # or: pip install pluto_siege
110
+ ```
111
+
112
+ Launch from any terminal:
113
+ ```bash
114
+ pluto_siege
115
+ ```
116
+
117
+ #### Option B: From Source (Clone Repository)
118
+ Clone the repository and install dependencies:
119
+ ```bash
120
+ git clone https://github.com/SketchTurnerDev/pluto_siege.git
121
+ cd pluto_siege
122
+ pip install -r requirements.txt
123
+ ```
124
+
125
+ Launch via the main script:
126
+ ```bash
127
+ python pluto_siege.py
128
+ # or: python -m pluto_siege
129
+ ```
130
+
131
+ ## Demo
132
+
133
+ <p align="center">
134
+ <img src="https://github.com/user-attachments/assets/c3258d0d-f574-4a01-9853-89c5cb2afc33" alt="PlutoSiege Demo" width="100%">
135
+ </p>
136
+
137
+ ## Application Menu
138
+
139
+ The main menu provides access to all core operations:
140
+
141
+ ### 1. Capture
142
+ Listens for incoming RF bursts on the configured receiver frequency (`rx_freq`).
143
+ - Real-time dBFS level meter with saturation (`SAT!`) warnings.
144
+ - Automated noise floor estimation or manual threshold detection.
145
+ - Pre-trigger history ring buffer to preserve signal preambles.
146
+ - Saves captures as standard SigMF (`.sigmf-meta` and `.sigmf-data`) pairs with optional GPS geolocation tags.
147
+
148
+ ### 2. Transmit
149
+ Browse and replay saved SigMF recordings.
150
+ - Displays recorded timestamp, center frequency, sample rate, sample count, and GPS coordinates.
151
+ - Replays signals via the PlutoSDR transmitter on the configured frequency (`tx_freq`).
152
+ - In-place deletion of unwanted recordings (`D` or `Delete`).
153
+
154
+ ### 3. Loopback Test
155
+ Internal hardware diagnostic to verify the SDR transceiver and USB/DMA pipeline.
156
+ - Transmits an internal digital test tone through the AD936x loopback path.
157
+ - Calculates received Signal-to-Noise Ratio (SNR) to confirm hardware health.
158
+
159
+ ### 4. Settings
160
+ Configures radio parameters, trigger behavior, GPS integration, and interface preferences. Settings can be edited directly in the TUI and are saved to `settings.json`.
161
+
162
+ | Parameter | Type | Default | Description |
163
+ | :--- | :--- | :--- | :--- |
164
+ | `pluto_uri` | `str` | `usb:` | Pluto connection URI (`usb:` or `ip:`). |
165
+ | `pluto_ip` | `str` | `192.168.2.1` | Remembered Pluto IP address when toggling between USB and IP modes. |
166
+ | `rx_freq` | `int` | `433920000` | Receiver center frequency in Hz. |
167
+ | `tx_freq` | `int` | `433920000` | Transmitter center frequency in Hz. |
168
+ | `permit_out_of_spec_frequency` | `bool` | `false` | Allows tuning outside 325 MHz – 3.8 GHz range (up to 70 MHz – 6.0 GHz). |
169
+ | `sample_rate` | `int` | `2100000` | Sample rate in Hz (521 kSPS – 61.44 MSPS). |
170
+ | `rx_gain` | `float` | `15.0` | Manual RX hardware gain in dB (0.0 to 74.5 dB). |
171
+ | `tx_gain` | `float` | `0.0` | Manual TX attenuation gain in dB (-89.75 to 0.0 dB). |
172
+ | `auto_threshold` | `bool` | `true` | Automated noise floor calculation. |
173
+ | `auto_trigger_margin` | `float` | `8.0` | Margin in dB above noise floor required to trigger capture (1.0 to 30.0 dB). |
174
+ | `manual_threshold` | `float` | `-30.0` | Fixed trigger threshold in dBFS when auto is off. |
175
+ | `pre_trigger_buffers` | `int` | `2` | Number of pre-trigger buffers kept in memory. |
176
+ | `silence_seconds` | `float` | `0.80` | Silence required to stop recording. |
177
+ | `max_post_trigger_seconds` | `float` | `4.00` | Maximum recording length after trigger. |
178
+ | `rx_buffer_size` | `int` | `32768` | DMA buffer size in samples (1024 to 32768). |
179
+ | `enable_gps` | `bool` | `false` | Hardware GPS geolocation in SigMF recordings via gpsd daemon. |
180
+ | `gpsd_host` | `str` | `127.0.0.1` | Local or remote gpsd daemon host address. |
181
+ | `gpsd_port` | `int` | `2947` | gpsd daemon TCP port (default 2947). |
182
+ | `enable_sound` | `bool` | `true` | Acoustic cue feedback for trigger, TX, and status events. |
183
+ | `enable_mouse` | `bool` | `true` | Terminal mouse interaction support. |
184
+
185
+ ## License
186
+
187
+ Distributed under the **GNU General Public License v3.0** (GPL-3.0). See [`LICENSE`](LICENSE) for details.
@@ -0,0 +1,26 @@
1
+ pluto_siege/__init__.py,sha256=kicb9I6N5r682hemivIGINnUpTqsn_riQf47fZqb2o8,1566
2
+ pluto_siege/__main__.py,sha256=iD68E8RLyyqTB3pDs5eUSkI9u8UmkUQJS6vhImoPv0c,894
3
+ pluto_siege/config.py,sha256=ENcdDXxRV3jUNq-NbEx0ZKW-0lTJ5o1JYF_Q_jLhvD8,8020
4
+ pluto_siege/constants.py,sha256=oEcxT6t0LURON5ZvXuMOGQsbEljz8meBIvkFpQvaKMY,4831
5
+ pluto_siege/device.py,sha256=EipZ9Cf4TdMWduadEArI3xMTgdyXu05oXXerZedlp-c,10688
6
+ pluto_siege/dsp.py,sha256=5GJzQcBWX13Nw-fufqvyHcOdm8eBZBi-W_8wZa8lHnE,5433
7
+ pluto_siege/engine.py,sha256=Bd8-sWSI61AqqDsQT4YM-0G37YL8tkIgfZ2CFIFUafM,17760
8
+ pluto_siege/gps.py,sha256=2i5ctke0jWRU6EZS3aqGs46ivHhiq0Jjm8i6bz2PLzY,14203
9
+ pluto_siege/settings.py,sha256=Ijpf1KZ7UjsEbyx453h6YXljl0Z-DgWv401lO7BH2Jk,1491
10
+ pluto_siege/sigmf.py,sha256=KkMsfKvXLG3qBORqikt0bajOoGBu81t4dfBj4bB6y8U,11502
11
+ pluto_siege/sound.py,sha256=fXLElpkPNalCP9nWyYd6xS-9K68GfTdaS5dMsocRcgA,4808
12
+ pluto_siege/ui/__init__.py,sha256=Q7R5UpmUEor_BG_CcDsFlkzRbNeHY8JEV9WyzahPM1k,839
13
+ pluto_siege/ui/screens/__init__.py,sha256=3USntuzQuVeZS2mu1eAHdPXgIt30sp-1EEkswiuGFE8,1208
14
+ pluto_siege/ui/screens/capture.py,sha256=tW_3St6qdr3oXjO7121QFhR59KPDcGSLj9OiUEkAoXU,7780
15
+ pluto_siege/ui/screens/loopback.py,sha256=E9sn_pg_VoYD6T5vEpA7EZqCFYAB_wDgDXXrCyf85r0,3190
16
+ pluto_siege/ui/screens/main_menu.py,sha256=CgX3aXJVT8ceAYTttsjjHFQgXb13ATEMPQH2b9JYC_M,11690
17
+ pluto_siege/ui/screens/settings.py,sha256=MgYA7wiKHowJuVlJu6UMFFfeitEUO5boYpoTabCeZDw,16952
18
+ pluto_siege/ui/screens/transmit.py,sha256=_xJhROsyIVJWh1J00Kqm4GaVKNBjeelerHm26Vp0ZvU,8012
19
+ pluto_siege/ui/widgets/__init__.py,sha256=4HZ67t9GcxuQBdmUEjQh2eyb5CnLTmnhWGtVCHddLsY,1282
20
+ pluto_siege/ui/widgets/framework.py,sha256=UdHkRsIQsTw61RT8LIs3Ctotq1U4sC6SDppmVM8DjvQ,27568
21
+ pluto_siege-2.0.1.dist-info/licenses/LICENSE,sha256=P2VF7xDyI7u9iiNtSqUy7Zo1II3MqnUh52EaDU9fv_w,35128
22
+ pluto_siege-2.0.1.dist-info/METADATA,sha256=_OkzxwMIOf9BIt_hP4oBEzmAv8pA62eAbNtDMfPfPOk,8456
23
+ pluto_siege-2.0.1.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
24
+ pluto_siege-2.0.1.dist-info/entry_points.txt,sha256=syw-oRf-bag3AnBCsJG6U42hCko4PRWT-wkwDnAjNzY,70
25
+ pluto_siege-2.0.1.dist-info/top_level.txt,sha256=d10eGErK2F1SZl1rIxAJNJEDcptpuq1AaPTPZEF-hGg,12
26
+ pluto_siege-2.0.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.2.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ pluto_siege = pluto_siege.ui.screens.main_menu:main