Add start.sh as the recommended production entry point with: - gunicorn + gevent worker for concurrent SSE/WebSocket handling - CLI flags for port, host, debug, HTTPS, and dependency checks - Auto-fallback to Flask dev server if gunicorn not installed - Conditional gevent monkey-patch in app.py via INTERCEPT_USE_GEVENT env var - Docker CMD updated to use start.sh - Updated all docs, setup.sh, and requirements.txt accordingly Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
23 KiB
INTERCEPT Usage Guide
Detailed instructions for each mode.
Pager Mode
- Select Hardware - Choose your SDR type (RTL-SDR, LimeSDR, or HackRF)
- Select Device - Choose your SDR device from the dropdown
- Set Frequency - Enter a frequency in MHz or use a preset
- Choose Protocols - Select which protocols to decode (POCSAG/FLEX)
- Adjust Settings - Set gain, squelch, and PPM correction as needed
- Start Decoding - Click the green "Start Decoding" button
Frequency Presets
- Click a preset button to quickly set a frequency
- Add custom presets using the input field and "Add" button
- Right-click a preset to remove it
- Click "Reset to Defaults" to restore default frequencies
433MHz Sensor Mode
- Select Hardware - Choose your SDR type
- Select Device - Choose your SDR device
- Start Decoding - Click "Start Decoding"
- View Sensors - Decoded sensor data appears in real-time
Supports 200+ protocols including weather stations, TPMS, doorbells, and IoT devices.
WiFi Mode
- Select Interface - Choose a WiFi adapter capable of monitor mode
- Enable Monitor Mode - Click "Enable Monitor" (uncheck "Kill processes" to preserve other connections)
- Start Scanning - Click "Start Scanning" to begin
- View Networks - Networks appear in the output panel with signal strength
- Track Devices - Click the chart icon on any network to track its signal over time
- Capture Handshakes - Click "Capture" on a network to start handshake capture
Tips
- Run with
sudofor monitor mode to work - Check your adapter supports monitor mode:
iw list | grep monitor - Use "Kill processes" option if NetworkManager interferes
Bluetooth Mode
- Select Interface - Choose your Bluetooth adapter
- Choose Mode - Select scan mode (hcitool, bluetoothctl)
- Start Scanning - Click "Start Scanning"
- View Devices - Devices appear with name, address, and classification
Tracker Detection
INTERCEPT automatically detects known trackers:
- Apple AirTag
- Tile
- Samsung SmartTag
- Chipolo
Sub-GHz Analyzer
- Connect HackRF - Plug in your HackRF One device
- Set Frequency - Enter a frequency in the 300-928 MHz ISM range or use a preset
- Start Capture - Click "Start Capture" to begin signal analysis
- View Spectrum - Real-time spectrum visualization of the selected band
- Protocol Decoding - Identified protocols are displayed with decoded data
Supported Protocols
Common ISM band protocols including garage doors, key fobs, weather stations, and IoT devices in the 300-928 MHz range.
VDL2 (Aircraft Datalink)
- Select Hardware - Choose your SDR type
- Select Device - Choose your SDR device
- Set Frequencies - Default VDL2 frequencies are pre-configured (136.975, 136.725, 136.775 MHz etc.)
- Start Decoding - Click "Start" to begin VDL2 reception via dumpvdl2
- View Messages - AVLC frames appear with source/destination, signal levels, and decoded content
- Inspect Details - Click a message to view full AVLC frame details and raw JSON
- Export - Use CSV or JSON export buttons to save captured messages
Tips
- VDL2 is most active near airports and along flight corridors
- Multiple frequencies can be monitored simultaneously for better coverage
- VDL2 data is also accessible from the ADS-B dashboard
Listening Post
- Select Hardware - Choose your SDR type
- Set Frequency Range - Define start and end frequencies for scanning
- Start Scanning - Click "Start Scan" for wideband sweep
- View Signals - Discovered signals are listed with frequency and SNR
- Tune In - Click a signal to tune the audio demodulator
- Listen - Real-time audio plays in your browser
Demodulation Modes
- FM - Narrowband and wideband FM
- SSB - Upper and lower sideband for amateur radio and shortwave
Aircraft Mode (ADS-B)
- Select Hardware - Choose your SDR type (RTL-SDR uses dump1090, others use readsb)
- Check Tools - Ensure dump1090 or readsb is installed
- Set Location - Choose location source:
- Manual Entry - Type coordinates directly
- Browser GPS - Use browser's built-in geolocation (requires HTTPS)
- USB GPS Dongle - Connect a USB GPS receiver for continuous updates
- Shared Location - By default, the observer location is shared across modules
(disable with
INTERCEPT_SHARED_OBSERVER_LOCATION=false)
- Start Tracking - Click "Start Tracking" to begin ADS-B reception
- View Map - Aircraft appear on the interactive Leaflet map
- Click Aircraft - Click markers for detailed information
- Display Options - Toggle callsigns, altitude, trails, range rings, clustering
- Filter Aircraft - Use dropdown to show all, military, civil, or emergency only
- Full Dashboard - Click "Full Screen Dashboard" for dedicated radar view
Note: ADS-B auto-start is disabled by default. To enable auto-start on dashboard load, set
INTERCEPT_ADSB_AUTO_START=true.
Emergency Squawks
The system highlights aircraft transmitting emergency squawks:
- 7500 - Hijack
- 7600 - Radio failure
- 7700 - General emergency
ACARS Messaging
- Select Hardware - Choose your SDR type
- Select Device - Choose your SDR device
- Select Region - Choose North America, Europe, or Asia-Pacific to auto-populate frequencies
- Select Frequencies - Check one or more ACARS frequencies (131.550 MHz primary worldwide, 130.025 MHz secondary USA/Canada, etc.)
- Adjust Gain - Set gain (0 for auto, or 0-50 dB)
- Start Decoding - Click "Start" to begin ACARS reception via acarsdec
- View Messages - Aircraft messages appear in real-time with flight ID, registration, and content
Tips
- A vertical polarization antenna works best for ACARS
- Quarter-wave dipole: 57 cm per element at 130 MHz
- Stock SDR antenna may work at close range near airports
- Outdoor placement with clear sky view significantly improves reception
ADS-B History (Optional)
The history dashboard persists aircraft messages and per-aircraft snapshots to Postgres for long-running tracking and reporting.
Enable History
Set the following environment variables (Docker recommended):
| Variable | Default | Description |
|---|---|---|
INTERCEPT_ADSB_HISTORY_ENABLED |
false |
Enables history storage and reporting |
INTERCEPT_ADSB_DB_HOST |
localhost |
Postgres host (use adsb_db in Docker) |
INTERCEPT_ADSB_DB_PORT |
5432 |
Postgres port |
INTERCEPT_ADSB_DB_NAME |
intercept_adsb |
Database name |
INTERCEPT_ADSB_DB_USER |
intercept |
Database user |
INTERCEPT_ADSB_DB_PASSWORD |
intercept |
Database password |
Other ADS-B Settings
| Variable | Default | Description |
|---|---|---|
INTERCEPT_ADSB_AUTO_START |
false |
Auto-start ADS-B tracking when the dashboard loads |
INTERCEPT_SHARED_OBSERVER_LOCATION |
true |
Share observer location across ADS-B/AIS/SSTV/Satellite modules |
Local install example
INTERCEPT_ADSB_AUTO_START=true \
INTERCEPT_SHARED_OBSERVER_LOCATION=false \
sudo ./start.sh
Docker example (.env)
INTERCEPT_ADSB_AUTO_START=true
INTERCEPT_SHARED_OBSERVER_LOCATION=false
Docker Setup
docker-compose.yml includes an adsb_db service and a persistent volume for history storage:
docker compose --profile history up -d
To store Postgres data on external storage, set PGDATA_PATH (defaults to ./pgdata):
PGDATA_PATH=/mnt/usbpi1/intercept/pgdata
Using the History Dashboard
- Open /adsb/history
- Use Start Tracking to run ADS-B in headless mode
- View aircraft history and timelines
- Stop tracking when desired (session history is recorded)
If the History dashboard shows HISTORY DISABLED, enable INTERCEPT_ADSB_HISTORY_ENABLED=true and ensure Postgres is running.
Satellite Mode
- Set Location - Choose location source:
- Manual Entry - Type coordinates directly
- Browser GPS - Use browser's built-in geolocation
- USB GPS Dongle - Connect a USB GPS receiver for continuous updates
- Add Satellites - Click "Add Satellite" to enter TLE data or fetch from Celestrak
- Calculate Passes - Click "Calculate Passes" to predict upcoming passes
- View Sky Plot - Polar plot shows satellite positions in real-time
- Ground Track - Map displays satellite orbit path and current position
- Full Dashboard - Click "Full Screen Dashboard" for dedicated satellite view
Adding Satellites from Celestrak
- Click "Add Satellite"
- Select "Fetch from Celestrak"
- Choose a category (Amateur, Weather, ISS, Starlink, etc.)
- Select satellites to add
Weather Satellites
- Set Location - Enter observer coordinates or use GPS
- Select Satellite - Choose NOAA (APT) or Meteor (LRPT)
- View Passes - Upcoming passes shown with polar plot and ground track
- Start Capture - Click "Start Capture" when a satellite is overhead, or enable auto-scheduler
- View Images - Decoded imagery appears in the gallery
Auto-Scheduler
Enable the auto-scheduler to automatically capture passes:
- Calculates upcoming NOAA and Meteor passes for your location
- Starts SatDump at the correct time and frequency
- Decoded images are saved with timestamps
Space Weather
- Switch to Space Weather mode - Select "Space Weather" from the Space navigation group
- View Dashboard - Solar indices, NOAA scales, band conditions, and charts load automatically
- Solar Imagery - Toggle between SDO 193A, 304A, and Magnetogram views
- D-RAP Maps - Select frequency (5-30 MHz) to view HF radio absorption maps
- Aurora Forecast - View the OVATION aurora oval for the northern hemisphere
- Alerts - Review current SWPC space weather alerts and warnings
- Active Regions - View solar active region data (number, location, area)
- Refresh - Data auto-refreshes every 5 minutes, or click "Refresh Now"
Tips
- No SDR hardware required — all data comes from public APIs (NOAA SWPC, NASA SDO, HamQSL)
- Check HF band conditions before operating on shortwave frequencies
- Kp >= 5 indicates geomagnetic storm conditions that may affect HF propagation
- D-RAP maps show where HF absorption is highest — useful for path planning
- Solar imagery updates approximately every 15 minutes from NASA SDO
AIS Vessel Tracking
- Select Hardware - Choose your SDR type
- Start Tracking - Click "Start Tracking" to monitor AIS frequencies (161.975/162.025 MHz)
- View Map - Vessels appear on the interactive maritime map
- Click Vessels - View name, MMSI, callsign, destination, speed, heading
- Full Dashboard - Click "Full Screen Dashboard" for dedicated maritime view
VHF DSC Channel 70
Digital Selective Calling monitoring runs alongside AIS:
- Distress, Urgency, Safety, and Routine messages
- Distress positions plotted with pulsing alert markers
- Audio alerts for critical messages
WebSDR
- Set Frequency - Enter a frequency in kHz (e.g., 6500 for 6.5 MHz)
- Select Mode - Choose demodulation mode (USB, LSB, AM, CW)
- Find Receivers - Click "Find Receivers" to discover available KiwiSDR nodes worldwide
- Select Receiver - Click a receiver from the list to connect
- Listen - Audio streams in real-time via WebSocket
- Adjust Volume - Use the volume slider and monitor the S-meter
- Spy Station Presets - Use the quick-tune buttons to jump to known number station frequencies
Tips
- Requires an internet connection to access the KiwiSDR network
- Receiver list is cached for 1 hour to reduce API load
- Receivers are sorted by distance from your location
- Integrated spy station presets allow quick tuning to SIGINT targets
ISS SSTV
- Select Hardware - Choose your SDR type
- Select Device - Choose your SDR device
- Set Frequency - Default is 145.800 MHz (ISS downlink)
- Set Location - Enter lat/lon for Doppler correction and pass prediction
- Update TLE - Click "Update TLE" to fetch latest ISS orbital elements
- Wait for Pass - The next pass countdown shows when ISS will be overhead
- Start Decoding - Click "Start" to begin SSTV reception
- View Images - Decoded SSTV images appear in the gallery with timestamps
Tips
- A V-dipole or better antenna is required (stock antenna will not work)
- V-dipole construction: 51 cm per element at 145.8 MHz, 120-degree angle between elements
- ISS SSTV events occur during special anniversaries and missions — check ARISS for schedules
- Best passes have elevation > 30 degrees above horizon
- Doppler shift tracking dramatically improves reception quality
- Common SSTV modes: PD120, PD180, Martin1, Scottie1
- Outdoor antenna placement with clear sky view is essential
HF SSTV
- Select Hardware - Choose your SDR type
- Select Device - Choose your SDR device
- Select Frequency - Choose from 13 preset frequencies or enter a custom one
- Modulation - Auto-selected based on frequency (USB for HF, FM for VHF/UHF)
- Start Decoding - Click "Start" to begin SSTV reception
- View Images - Decoded amateur radio images appear in the gallery
Tips
- HF frequencies (3-30 MHz) require an upconverter with RTL-SDR
- VHF/UHF frequencies (145 MHz, 433 MHz) work directly with RTL-SDR
- Most popular frequency: 14.230 MHz USB (20m band) with regular activity
- Weekend activity peaks on most HF bands
- Amateur license is not required to receive (listen-only)
APRS
- Select Hardware - Choose your SDR type
- Set Frequency - Defaults to regional APRS frequency (144.390 MHz NA, 144.800 MHz EU)
- Start Decoding - Click "Start Decoding" to begin packet radio reception via direwolf
- View Map - Station positions appear on the interactive map
- View Messages - Position reports, telemetry, and messages displayed in real time
Utility Meters
- Start Monitoring - Click "Start" to begin meter broadcast reception via rtl_amr
- View Meters - Decoded meter data appears with meter ID, type, and consumption
- Filter - Filter by meter type (electric, gas, water) or meter ID
BT Locate (SAR Device Location)
- Set Target - Enter one or more target identifiers:
- MAC Address - Exact Bluetooth address (AA:BB:CC:DD:EE:FF)
- Name Pattern - Substring match (e.g., "iPhone", "Galaxy")
- IRK - 32-character hex Identity Resolving Key for RPA resolution
- Detect IRKs - Click "Detect" to auto-extract IRKs from paired devices
- Choose Environment - Select the RF environment preset:
- Open Field (n=2.0) - Best for open areas with line-of-sight
- Outdoor (n=2.2) - Default, works well in most outdoor settings
- Indoor (n=3.0) - For buildings with walls and obstacles
- Start Locate - Click "Start Locate" to begin tracking
- Monitor HUD - The proximity display shows:
- Proximity band (IMMEDIATE / NEAR / FAR)
- Estimated distance in meters
- Raw RSSI and smoothed RSSI average
- Detection count and GPS-tagged points
- Follow the Signal - Move towards stronger signal (higher RSSI / closer distance)
- Audio Alerts - Enable audio for proximity tones that increase in pitch as you get closer
- Review Trail - Check the map for GPS-tagged detection trail
Hand-off from Bluetooth Mode
- Open Bluetooth scanning mode and find the target device
- Click the "Locate" button on the device card
- BT Locate opens with the device pre-filled
- Click "Start Locate" to begin tracking
Tips
- For devices with address randomization (iPhones, modern Android), use the IRK method
- Click "Detect" next to the IRK field to auto-extract IRKs from paired devices
- The RSSI chart shows signal trend over time — use it to determine if you're getting closer
- Clear the trail when starting a new search area
GPS Mode
- Start GPS - Click "Start" to connect to gpsd and begin position tracking
- View Map - Your position appears on the interactive map with a track trail
- Monitor Stats - Speed, heading, altitude, and satellite count displayed in real-time
- Record Track - Enable track recording to save your path
Tips
- Ensure gpsd is running:
sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock - GPS fix may take 30-60 seconds after cold start
- Accuracy improves with more satellites in view
TSCM (Counter-Surveillance)
- Select Sweep Type - Choose from Quick Scan (2 min), Standard (5 min), Full Sweep (15 min), or presets for Wireless Cameras, Body-Worn Devices, or GPS Trackers
- Select Scan Sources - Toggle WiFi, Bluetooth, and/or RF/SDR scanning and select the appropriate interfaces
- Select Baseline - Optionally choose a previously recorded baseline to compare against
- Start Sweep - Click "Start Sweep" to begin scanning
- Review Results - Detected devices are classified and scored by threat level
- Record Baseline - In a known clean environment, record a baseline for future comparison
- Export Report - Generate PDF report, JSON annex, or CSV data
Threat Levels
- Informational (0-2) - Known or expected devices
- Needs Review (3-5) - Unusual devices requiring assessment
- High Interest (6+) - Multiple indicators warrant investigation
Tips
- Record a baseline in a known clean environment before conducting sweeps
- Use the meeting window feature to flag new RF signatures during sensitive periods
- Full functionality requires WiFi adapter, Bluetooth adapter, and SDR hardware
- Threat detection uses a database of 47K+ known tracker fingerprints
Spy Stations
- Browse Database - View the full list of documented number stations and diplomatic networks
- Filter by Type - Toggle between Number Stations and Diplomatic Networks
- Filter by Country - Select specific countries (Russia, Cuba, Israel, Poland, etc.)
- Filter by Mode - Filter by demodulation mode (USB, AM, CW, OFDM)
- View Details - Click "Details" on a station card for full information
- Tune In - Click "Tune In" to route the station frequency to the Listening Post or WebSDR
Tips
- Data sourced from priyom.org (non-profit monitoring community)
- Most activity is on HF bands (3-30 MHz) — propagation varies by time of day
- Notable stations: UVB-76 "The Buzzer" (4625 kHz), E06 English Man, HM01 Cuban Numbers
- Legal to monitor in most countries (check local regulations)
- No decryption or content decoding is included — this is a reference database
Meshtastic
- Connect Device - Plug in a Meshtastic device via USB or connect via TCP
- Start - Click "Start" to connect to the mesh network
- View Messages - Real-time message stream from the mesh
- View Nodes - Connected nodes displayed with signal metrics (RSSI, SNR)
- Send Messages - Type messages to broadcast on the mesh
Offline Mode
- Open Settings - Click the gear icon in the navigation bar
- Offline Tab - Toggle "Offline Mode" to enable local assets
- Configure Sources - Switch assets and fonts from CDN to local
- Set Tile Provider - Choose a map tile provider or enter a custom tile server URL
- Check Assets - Click "Check Assets" to verify all local files are present
Tips
- Download required assets: Leaflet JS/CSS, Chart.js, Inter and JetBrains Mono fonts
- Assets are stored in the
static/vendor/directory - For maps, you need a local tile server (e.g., self-hosted OpenStreetMap tiles)
- Missing assets fail gracefully with console warnings
- Useful for air-gapped environments, field deployments, or reducing latency
Remote Agents (Distributed SIGINT)
Deploy lightweight sensor nodes across multiple locations and aggregate data to a central controller.
Setting Up an Agent
- Install INTERCEPT on the remote machine
- Create config file (
intercept_agent.cfg):[agent] name = sensor-node-1 port = 8020 [controller] url = http://192.168.1.100:5050 api_key = your-secret-key push_enabled = true [modes] pager = true sensor = true adsb = true - Start the agent:
python intercept_agent.py --config intercept_agent.cfg
Registering Agents in the Controller
- Navigate to
/controller/managein the main INTERCEPT instance - Enter agent details:
- Name: Must match config file (e.g.,
sensor-node-1) - Base URL: Agent address (e.g.,
http://192.168.1.50:8020) - API Key: Must match config file
- Name: Must match config file (e.g.,
- Click "Register Agent"
- Use "Test" to verify connectivity
Using Remote Agents
Once registered, agents appear in mode dropdowns:
- Select agent from the dropdown in supported modes
- Start mode - Commands are proxied to the remote agent
- View data - Data streams back to your browser via SSE
Multi-Agent Streaming
Enable "Show All Agents" to aggregate data from all registered agents simultaneously.
For complete documentation, see Distributed Agents Guide.
Configuration
INTERCEPT can be configured via environment variables:
| Variable | Default | Description |
|---|---|---|
INTERCEPT_HOST |
0.0.0.0 |
Server bind address |
INTERCEPT_PORT |
5050 |
Server port |
INTERCEPT_DEBUG |
false |
Enable debug mode |
INTERCEPT_LOG_LEVEL |
WARNING |
Log level (DEBUG, INFO, WARNING, ERROR) |
INTERCEPT_DEFAULT_GAIN |
40 |
Default RTL-SDR gain |
Example: INTERCEPT_PORT=8080 sudo ./start.sh
Command-line Options
Production server (recommended)
./start.sh --help
-p, --port PORT Port to listen on (default: 5050)
-H, --host HOST Host to bind to (default: 0.0.0.0)
-d, --debug Run in debug mode (Flask dev server)
--https Enable HTTPS with self-signed certificate
--check-deps Check dependencies and exit
start.sh auto-detects gunicorn + gevent and runs a production WSGI server with cooperative greenlets — this handles multiple SSE streams and WebSocket connections concurrently without blocking. Falls back to the Flask dev server if gunicorn is not installed.
Development server
python3 intercept.py --help
-p, --port PORT Port to run server on (default: 5050)
-H, --host HOST Host to bind to (default: 0.0.0.0)
-d, --debug Enable debug mode
--check-deps Check dependencies and exit