Important
TestFlight beta has expired. With rapid DragonSync/DroneID development by @alphafox02, I lack resources to continue this project. Open an issue if you'd like to see development resume.
Real-time drone, aircraft & FPV detection and monitoring for iOS/macOS. Professional-grade detection with advanced signal analysis and intelligence.
- DragonSync is a user friendly iOS/macOS alternative/companion app to the Python backend utility
- Relies on ZMQ data from DroneID, and can be used with or without additional wrapper scripts
- Standalone WiFi RID ESP32 firmware is also an option. Learn more in installation options
- 1090MHz Mode S/ADS-B reception
- Multicast forwarding of ZMQ to CoT
- Output to Kismet, Lattice and API endpoints
- iOS Keychain support for TAK TLS
- Migrage from v1, export and restore backups
- Uses SwiftData for speed and secure storage
- Remote/Drone ID tracking (WiFi, Bluetooth, SDR)
- Ocusync decoding
- Flight path visualization
- Multi-protocol support (ZMQ, multicast CoT)
- Spoof Detection: Signal strength, position consistency, transmission patterns, flight physics analysis
- Encrypted Drones: RSSI-based distance estimation
- FPV Cameras: RX5808 + FPVWD detection
- MAC Randomization Sniffer: Real-time alerts with origin tracking
- ADS-B: Uses any feed with valid data (readsb,dump1090,tar1090,etc.)
- CPU, memory, temperature, GPS status
- ANTSDR Pluto & Zynq temperatures
- Configurable health & range alerts
- Swipe-to-delete & untrack
- Aliases and trust labels
- Live map view shows unified detections by type
- Dashboard with signal counts, health, proximity alerts
- Aircraft and drones are stored for analysis
- FAA RID lookup provides up-to-date drone data
- Displays operator, takeoff and drone locations
- Search, sort, review, export (KML, CSV)
- REST API (port 8088): 7 JSON endpoints (
/drones,/aircraft,/status,/signals,/config,/health,/update/check) - MQTT: Home Assistant auto-discovery, TLS, QoS 0-2, configurable topics
- TAK/ATAK: CoT XML over multicast/TCP/TLS with iOS Keychain .p12 support
- Webhooks: Discord, Slack, custom HTTP POST with event filtering
- Kismet: Device tagging via REST API
- Lattice DAS: Structured detection reports
- ZMQ: Direct JSON from
zmq_decoder.py(ports 4224/4225) - Multicast CoT: Receive from
DragonSync.py(239.2.3.1:6969) - ADS-B: HTTP polling from readsb/tar1090/dump1090 endpoints
- Background: Continuous monitoring with local notifications
| Feature | WarDragon Pro | Drag0net Scanner | Custom Build |
|---|---|---|---|
| Best For | Immediate deployment | Portable WiFi RID detection | Full feature set |
| Setup Time | ~5 min | ~15 min | 30-60 min |
| WiFi RID (2.4GHz) | ✓ | ✓ | ✓ |
| WiFi RID (5GHz) | ✓ | ✗ | ✓ (dual-band adapter) |
| Bluetooth RID | ✓ | ✗ | ✓ (Sniffle hardware) |
| SDR Decoding | ✓ (ANTSDR E200) | ✗ | ✓ (ANTSDR E200) |
| FPV Detection | ✓ (RX5808) | ✗ | ✓ (RX5808) |
| GPS | External USB | iOS device | External USB |
| System Monitoring | ✓ | ✗ | ✓ |
| TAK Integration | ✓ | ✗ | ✓ |
| Requires Computer | No | No | Yes |
Pre-configured turnkey solution.
- Power on device
- Connect iOS device to same network
- App → Settings → Enable ZMQ → Enter IP
- Start monitoring
Troubleshooting:
- System status requires GPS (use
--static_gpsflag or wait for lock) - Connection issues? Mod Config:
/home/dragon/WarDragon/DragonSync/config.inizmq_host = 0.0.0.0(if localhost fails)tak_multicast_addr = 224.0.0.1(for some networks)
- No SDR Temps in status: Use the DJI FW on ANTSDR, UHD will not work with this
Portable WiFi RID without a computer.
Hardware: ESP32-C3/S3 XIAO or LilyGO T-Dongle
Flash (Linux/macOS):
curl -fsSL https://raw.githubusercontent.com/Root-Down-Digital/DragonSync-iOS/refs/heads/main/Util/setup.sh -o setup.sh && \
[[ $(shasum -a 256 setup.sh 2>/dev/null || sha256sum setup.sh) =~ ^f268d6f6b00400c8ce8d4491da08b94b7844b7aa0414e0dbdd92982a1ed024d6 ]] && \
chmod +x setup.sh && ./setup.shSelect option 4 or 5.
Manual: Download firmware
esptool.py --chip auto --port /dev/YOUR_PORT --baud 115200 \
--before default_reset --after hard_reset write_flash -z \
--flash_mode dio --flash_freq 80m --flash_size detect \
0x10000 firmwareFile.binConnect:
- SSID:
Dr4g0net| Password:wardragon1234| IP:192.168.4.1 - App: Settings → ZMQ IP:
192.168.4.1 - Web:
192.168.4.1in browser
Full feature set.
Hardware:
- Dual-band WiFi adapter
- Sniffle BT dongle
- Optional: ANTSDR E200, GPS, RX5808
Install:
curl -fsSL https://raw.githubusercontent.com/Root-Down-Digital/DragonSync-iOS/refs/heads/main/Util/setup.sh -o setup.sh && \
[[ $(shasum -a 256 setup.sh 2>/dev/null || sha256sum setup.sh) =~ ^f268d6f6b00400c8ce8d4491da08b94b7844b7aa0414e0dbdd92982a1ed024d6 ]] && \
chmod +x setup.sh && ./setup.shManual Install
Linux:
sudo apt update && sudo apt install -y python3 python3-pip git gpsd gpsd-clients lm-sensors
git clone https://github.com/alphafox02/DroneID.git
git clone https://github.com/alphafox02/DragonSync.git
cd DroneID && git submodule update --init && ./setup.shmacOS:
brew install python3 git gpsd
git clone https://github.com/alphafox02/DroneID.git
git clone https://github.com/alphafox02/DragonSync.git
cd DroneID && git submodule update --init && ./setup.shWindows: Use WSL or install Python/Git manually.
Run:
# Terminal 1 - WiFi
cd DroneID
python3 wifi_receiver.py --interface wlan0 -z --zmqsetting 127.0.0.1:4223
# Terminal 2 - Bluetooth
cd DroneID/Sniffle
python3 python_cli/sniff_receiver.py -l -e -a -z -b 2000000
# Terminal 3 - Decoder
cd DroneID
python3 zmq_decoder.py -z --zmqsetting 0.0.0.0:4224 --zmqclients 127.0.0.1:4222,127.0.0.1:4223 -v
# Terminal 4 - System Monitor
cd DragonSync
python3 wardragon_monitor.py --zmq_host 0.0.0.0 --zmq_port 4225 --interval 30App Config:
- Settings → ZMQ → Host IP → Port 4224
- Advanced → Port 4225 for system health
- Enable ADS-B, MQTT, webhooks as needed
Persist: Use service files
┌─────────────────────────────────────────────────────┐
│ Detection Sources │
│ • WiFi RID (2.4/5GHz) - wifi_receiver.py │
│ • Bluetooth RID - sniff_receiver.py (Sniffle) │
│ • SDR/FPV - ANTSDR/RX5808 via fpv_mdn_receiver.py │
│ • ESP32 Standalone - Drag0net (WiFi 2.4GHz) │
└────────────────────┬────────────────────────────────┘
│
┌────────────┴────────────┐
│ │
┌──────▼────────┐ ┌────────▼────────┐
│ zmq_decoder │ │ DragonSync.py │
│ Port: 4224 │ │ Multicast CoT │
│ (JSON) │ │ 239.2.3.1:6969 │
└──────┬────────┘ └────────┬────────┘
│ │
└──────────┬──────────────┘
│
┌──────────▼──────────┐ ┌────────────────┐
│ DragonSync iOS │◄─────┤ ADS-B (HTTP) │
│ • ZMQ: 4224, 4225 │ │ readsb/tar1090 │
│ • Multicast: 6969 │ └────────────────┘
│ • API: 8088 │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ Output Channels │
│ • REST API (JSON) │
│ • MQTT │
│ • TAK/ATAK (CoT) │
│ • Webhooks │
│ • Kismet │
│ • Lattice DAS │
└─────────────────────┘
Ingestion: ZMQ JSON (4224, 4225), Multicast CoT (239.2.3.1:6969), ADS-B HTTP
Processing: SwiftData persistence, spoof detection, signature analysis, rate limiting
Output: REST (8088), MQTT, TAK, webhooks, Kismet, Lattice
ZMQ (Recommended): JSON-based, full data access
- Port 4224: Drone detections
- Port 4225: System health
Multicast CoT: TAK/ATAK integration, less detailed
ADS-B: Enable in Settings, ingest from a given endpoint
MQTT: Home Assistant auto-discovery
REST API: JSON endpoints for custom integrations
| Task | Command |
|---|---|
| System Monitor | python3 wardragon_monitor.py --zmq_host 0.0.0.0 --zmq_port 4225 --interval 30 |
| Static GPS | python3 wardragon_monitor.py --zmq_host 0.0.0.0 --zmq_port 4225 --static_gps 37.7749,-122.4194,10 |
| SDR Decode | python3 zmq_decoder.py --dji -z --zmqsetting 0.0.0.0:4224 |
| WiFi Sniffer | python3 wifi_receiver.py --interface wlan0 -z --zmqsetting 127.0.0.1:4223 |
| BT Sniffer | python3 Sniffle/python_cli/sniff_receiver.py -l -e -a -z -b 2000000 |
| Decoder | python3 zmq_decoder.py -z --zmqsetting 0.0.0.0:4224 --zmqclients 127.0.0.1:4222,127.0.0.1:4223 -v |
git clone https://github.com/Root-Down-Digital/DragonSync-iOS.git
cd DragonSync-iOS && pod installOpen WarDragon.xcworkspace in Xcode.
Credits: DroneID DragonSync• Sniffle
License: MIT
IMPORTANT: READ BEFORE USE
While receiving RF signals is generally legal in most jurisdictions, users are solely responsible for:
- Complying with all applicable local, state, federal, and international laws and regulations
- Ensuring proper authorization before monitoring any communications
- Understanding that monitoring transmissions you are not authorized to receive may be illegal in your jurisdiction
- Obtaining necessary licenses or permissions required by your local regulatory authority
- Using appropriate frequencies and power levels in accordance with local regulations
**The authors, contributors, and maintainers of this software:**
- Make NO WARRANTIES, express or implied, regarding this software
- Accept NO RESPONSIBILITY for any use, misuse, or consequences of using this software
- Accept NO LIABILITY for any legal violations, damages, or harm resulting from use of this software
- Provide this software "AS IS" without any guarantee of fitness for any particular purpose
**By using this software, you acknowledge that:**
- You are solely responsible for your actions and any consequences
- You will use this software only in compliance with all applicable laws
- The authors bear no responsibility for your use of this software
**USE AT YOUR OWN RISK.**
Important
Keep WarDragon DragonOS updated for compatibility.
Caution
Use in compliance with local regulations.



