{"id":35690754,"url":"https://github.com/smittix/intercept","last_synced_at":"2026-03-12T23:04:51.077Z","repository":{"id":330169577,"uuid":"1119585052","full_name":"smittix/intercept","owner":"smittix","description":"iNTERCEPT, a free and open-source platform that unites the best signal intelligence tools into a single, accessible interface.","archived":false,"fork":false,"pushed_at":"2026-03-10T12:32:33.000Z","size":47830,"stargazers_count":1471,"open_issues_count":16,"forks_count":181,"subscribers_count":42,"default_branch":"main","last_synced_at":"2026-03-10T19:22:29.213Z","etag":null,"topics":["counter","intelligence","rtlsdr","signal","surveillance","tscm"],"latest_commit_sha":null,"homepage":"https://smittix.github.io/intercept/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/smittix.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"buy_me_a_coffee":"smittix"}},"created_at":"2025-12-19T14:05:44.000Z","updated_at":"2026-03-10T16:54:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/smittix/intercept","commit_stats":null,"previous_names":["smittix/intercept"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/smittix/intercept","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smittix%2Fintercept","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smittix%2Fintercept/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smittix%2Fintercept/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smittix%2Fintercept/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smittix","download_url":"https://codeload.github.com/smittix/intercept/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smittix%2Fintercept/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30448615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T21:31:01.033Z","status":"ssl_error","status_checked_at":"2026-03-12T21:30:43.161Z","response_time":114,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["counter","intelligence","rtlsdr","signal","surveillance","tscm"],"created_at":"2026-01-05T23:08:23.403Z","updated_at":"2026-03-12T23:04:51.065Z","avatar_url":"https://github.com/smittix.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\r\n  \u003cimg src=\"static/images/readme-banner.svg\" alt=\"iNTERCEPT — Signal Intelligence Platform\" width=\"100%\"\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/python-3.9+-blue.svg\" alt=\"Python 3.9+\"\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/license-Apache--2.0-green.svg\" alt=\"Apache 2.0 License\"\u003e\r\n  \u003cimg src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey.svg\" alt=\"Platform\"\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\nSupport the developer of this open-source project\r\n\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003ca href=\"https://www.buymeacoffee.com/smittix\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" \u003e\u003c/a\u003e\r\n\u003c/p\u003e\r\n\u003cp align=\"center\"\u003e\r\n  \u003cstrong\u003eSignal Intelligence Platform\u003c/strong\u003e\u003cbr\u003e\r\n  A web-based interface for software-defined radio tools.\r\n\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cimg src=\"static/images/screenshots/intercept-main.png\" alt=\"Screenshot\"\u003e\r\n\u003c/p\u003e\r\n\r\n---\r\n\r\n## Features\r\n\r\n- **Pager Decoding** - POCSAG/FLEX via rtl_fm + multimon-ng\r\n- **433MHz Sensors** - Weather stations, TPMS, IoT devices via rtl_433\r\n- **Sub-GHz Analyzer** - RF capture and protocol decoding for 300-928 MHz ISM bands via HackRF\r\n- **Aircraft Tracking** - ADS-B via dump1090 with real-time map and radar\r\n- **Vessel Tracking** - AIS ship tracking with VHF DSC distress monitoring\r\n- **ACARS Messaging** - Aircraft datalink messages via acarsdec\r\n- **VDL2** - VHF Data Link Mode 2 aircraft datalink decoding via dumpvdl2\r\n- **Listening Post** - Wideband frequency scanner with real-time audio monitoring\r\n- **Weather Satellites** - NOAA APT and Meteor LRPT image decoding via SatDump with auto-scheduler\r\n- **WebSDR** - Remote HF/shortwave listening via KiwiSDR network\r\n- **ISS SSTV** - Slow-scan TV image reception from the International Space Station\r\n- **HF SSTV** - Terrestrial SSTV on shortwave frequencies (80m-10m, VHF, UHF)\r\n- **APRS** - Amateur packet radio position reports and telemetry via direwolf\r\n- **Satellite Tracking** - Pass prediction with polar plot and ground track map\r\n- **Utility Meters** - Electric, gas, and water meter reading via rtlamr\r\n- **ADS-B History** - Persistent aircraft history with reporting dashboard (Postgres optional)\r\n- **WiFi Scanning** - Monitor mode reconnaissance via aircrack-ng\r\n- **Bluetooth Scanning** - Device discovery and tracker detection (with Ubertooth support)\r\n- **BT Locate** - SAR Bluetooth device location with GPS-tagged signal trail mapping and proximity alerts\r\n- **WiFi Locate** - Locate WiFi access points by BSSID with real-time signal meter, distance estimation, and proximity audio\r\n- **GPS** - Real-time GPS position tracking with live map, speed, altitude, and satellite info\r\n- **TSCM** - Counter-surveillance with RF baseline comparison and threat detection\r\n- **Meshtastic** - LoRa mesh network integration\r\n- **Space Weather** - Real-time solar and geomagnetic data from NOAA SWPC, NASA SDO, and HamQSL (no SDR required)\r\n- **Spy Stations** - Number stations and diplomatic HF network database\r\n- **Remote Agents** - Distributed SIGINT with remote sensor nodes\r\n- **Offline Mode** - Bundled assets for air-gapped/field deployments\r\n\r\n---\r\n\r\n## CW / Morse Decoder Notes\r\n\r\nLive backend:\r\n- Uses `rtl_fm` piped into `multimon-ng` (`MORSE_CW`) for real-time decode.\r\n\r\nRecommended baseline settings:\r\n- **Tone**: `700 Hz`\r\n- **Bandwidth**: `200 Hz` (use `100 Hz` for crowded bands, `400 Hz` for drifting signals)\r\n- **Threshold Mode**: `Auto`\r\n- **WPM Mode**: `Auto`\r\n\r\nAuto Tone Track behavior:\r\n- Continuously measures nearby tone energy around the configured CW pitch.\r\n- Steers the detector toward the strongest valid CW tone when signal-to-noise is sufficient.\r\n- Use **Hold Tone Lock** to freeze tracking once the desired signal is centered.\r\n\r\nTroubleshooting (no decode / noisy decode):\r\n- Confirm demod path is **USB/CW-compatible** and frequency is tuned correctly.\r\n- If multiple SDRs are connected and the selected one has no PCM output, Morse startup now auto-tries other detected SDR devices and reports the active device/serial in status logs.\r\n- Match **tone** and **bandwidth** to the actual sidetone/pitch.\r\n- Try **Threshold Auto** first; if needed, switch to manual threshold and recalibrate.\r\n- Use **Reset/Calibrate** after major frequency or band condition changes.\r\n- Raise **Minimum Signal Gate** to suppress random noise keying.\r\n\r\n---\r\n\r\n## Installation / Debian / Ubuntu / macOS\r\n\r\n### Quick Start\r\n\r\n```bash\r\ngit clone https://github.com/smittix/intercept.git\r\ncd intercept\r\n./setup.sh          # Interactive menu (first run launches setup wizard)\r\nsudo ./start.sh\r\n```\r\n\r\nOn first run, `setup.sh` launches a **guided wizard** that detects your OS, lets you choose install profiles, sets up the Python environment, and optionally configures environment variables and PostgreSQL.\r\n\r\nOn subsequent runs, it opens an **interactive menu**:\r\n\r\n```\r\nINTERCEPT Setup Menu\r\n════════════════════════════════════════\r\n  1) Install / Add Modules\r\n  2) System Health Check\r\n  3) Database Setup (ADS-B History)\r\n  4) Update Tools\r\n  5) Environment Configurator\r\n  6) Uninstall / Cleanup\r\n  7) View Status\r\n  0) Exit\r\n```\r\n\r\n\u003e **Production vs Dev server:** `start.sh` auto-detects gunicorn + gevent and runs a production server with cooperative greenlets — handles multiple SSE/WebSocket clients without blocking. Falls back to Flask dev server if gunicorn is not installed. For quick local development, you can still use `sudo -E venv/bin/python intercept.py` directly.\r\n\r\n### Install Profiles\r\n\r\nChoose what to install during the wizard or via menu option 1:\r\n\r\n| # | Profile | Tools |\r\n|---|---------|-------|\r\n| 1 | Core SIGINT | rtl_sdr, multimon-ng, rtl_433, dump1090, acarsdec, dumpvdl2, ffmpeg, gpsd |\r\n| 2 | Maritime \u0026 Radio | AIS-catcher, direwolf |\r\n| 3 | Weather \u0026 Space | SatDump, radiosonde_auto_rx |\r\n| 4 | RF Security | aircrack-ng, HackRF, BlueZ, hcxtools, Ubertooth, SoapySDR |\r\n| 5 | Full SIGINT | All of the above |\r\n| 6 | Custom | Per-tool checklist |\r\n\r\nMultiple profiles can be combined (e.g. enter `1 3` for Core + Weather).\r\n\r\n### CLI Flags\r\n\r\n```bash\r\n./setup.sh --non-interactive          # Headless full install (same as legacy behavior)\r\n./setup.sh --profile=core,weather     # Install specific profiles\r\n./setup.sh --health-check             # Check system health and exit\r\n./setup.sh --postgres-setup           # Run PostgreSQL setup and exit\r\n./setup.sh --menu                     # Force interactive menu\r\n```\r\n\r\n### Docker\r\n\r\n```bash\r\ngit clone https://github.com/smittix/intercept.git\r\ncd intercept\r\ndocker compose --profile basic up -d --build\r\n```\r\n\r\n\u003e **Note:** Docker requires privileged mode for USB SDR access. SDR devices are passed through via `/dev/bus/usb`.\r\n\r\n#### Multi-Architecture Builds (amd64 + arm64)\r\n\r\nCross-compile on an x64 machine and push to a registry. This is much faster than building natively on an RPi.\r\n\r\n```bash\r\n# One-time setup on your x64 build machine\r\ndocker run --privileged --rm tonistiigi/binfmt --install all\r\ndocker buildx create --name intercept-builder --use --bootstrap\r\n\r\n# Build and push for both architectures\r\nREGISTRY=ghcr.io/youruser ./build-multiarch.sh --push\r\n\r\n# On the RPi5, just pull and run\r\nINTERCEPT_IMAGE=ghcr.io/youruser/intercept:latest docker compose --profile basic up -d\r\n```\r\n\r\nBuild script options:\r\n\r\n| Flag | Description |\r\n|------|-------------|\r\n| `--push` | Push to container registry |\r\n| `--load` | Load into local Docker (single platform only) |\r\n| `--arm64-only` | Build arm64 only (for RPi deployment) |\r\n| `--amd64-only` | Build amd64 only |\r\n\r\nEnvironment variables: `REGISTRY`, `IMAGE_NAME`, `IMAGE_TAG`\r\n\r\n#### Using a Pre-built Image\r\n\r\nIf you've pushed to a registry, you can skip building entirely on the target machine:\r\n\r\n```bash\r\n# Set in .env or export\r\nINTERCEPT_IMAGE=ghcr.io/youruser/intercept:latest\r\n\r\n# Then just run\r\ndocker compose --profile basic up -d\r\n```\r\n\r\n### Environment Configuration\r\n\r\nUse the **Environment Configurator** (menu option 5) to interactively set any `INTERCEPT_*` variable. Settings are saved to a `.env` file that `start.sh` sources automatically on startup.\r\n\r\nYou can also create or edit `.env` manually:\r\n\r\n```bash\r\n# .env (auto-loaded by start.sh)\r\nINTERCEPT_PORT=5050\r\nINTERCEPT_ADSB_AUTO_START=true\r\nINTERCEPT_DEFAULT_LAT=51.5074\r\nINTERCEPT_DEFAULT_LON=-0.1278\r\n```\r\n\r\n### ADS-B History (Optional)\r\n\r\nThe ADS-B history feature persists aircraft messages to PostgreSQL for long-term analysis.\r\n\r\n**Automated setup (local install):**\r\n\r\n```bash\r\n./setup.sh --postgres-setup\r\n# Or use menu option 3: Database Setup\r\n```\r\n\r\nThis will install PostgreSQL if needed, create the database/user/tables, and write the connection settings to `.env`.\r\n\r\n**Docker:**\r\n\r\n```bash\r\ndocker compose --profile history up -d\r\n```\r\n\r\nSet the following environment variables (in `.env`):\r\n\r\n```bash\r\nINTERCEPT_ADSB_HISTORY_ENABLED=true\r\nINTERCEPT_ADSB_DB_HOST=adsb_db\r\nINTERCEPT_ADSB_DB_PORT=5432\r\nINTERCEPT_ADSB_DB_NAME=intercept_adsb\r\nINTERCEPT_ADSB_DB_USER=intercept\r\nINTERCEPT_ADSB_DB_PASSWORD=intercept\r\n```\r\n\r\nTo store Postgres data on external storage, set `PGDATA_PATH` (defaults to `./pgdata`):\r\n\r\n```bash\r\nPGDATA_PATH=/mnt/usbpi1/intercept/pgdata\r\n```\r\n\r\nThen open **/adsb/history** for the reporting dashboard.\r\n\r\n### System Health Check\r\n\r\nVerify your installation is complete and working:\r\n\r\n```bash\r\n./setup.sh --health-check\r\n# Or use menu option 2\r\n```\r\n\r\nChecks installed tools, SDR devices, port availability, permissions, Python venv, `.env` configuration, and PostgreSQL connectivity.\r\n\r\n### Open the Interface\r\n\r\nAfter starting, open **http://localhost:5050** in your browser. The username and password is \u003cb\u003eadmin\u003c/b\u003e:\u003cb\u003eadmin\u003c/b\u003e\r\n\r\nThe credentials can be changed in the ADMIN_USERNAME \u0026 ADMIN_PASSWORD variables in config.py\r\n\r\n---\r\n\r\n## Hardware Requirements\r\n\r\n| Hardware | Purpose | Price |\r\n|----------|---------|-------|\r\n| **RTL-SDR** | Required for all SDR features | ~$25-35 |\r\n| **WiFi adapter** | Must support promiscuous (monitor) mode | ~$20-40 |\r\n| **Bluetooth adapter** | Device scanning (usually built-in) | - |\r\n| **GPS** | Any Linux supported GPS Unit | ~10 |\r\n\r\nMost features work with a basic RTL-SDR dongle (RTL2832U + R820T2).\r\n\r\n| :exclamation:  Not using an RTL-SDR Device?   |\r\n|-----------------------------------------------\r\n|Intercept supports any device that SoapySDR supports. You must however have the correct module for your device installed! For example if you have an SDRPlay device you'd need to install soapysdr-module-sdrplay.\r\n\r\n| :exclamation:  GPS Usage   |\r\n|-----------------------------------------------\r\n|gpsd is needed for real time location. Intercept automatically checks to see if you're running gpsd in the background when any maps are rendered.\r\n\r\n---\r\n\r\n## Discord Server\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003ca href=\"https://discord.gg/EyeksEJmWE\"\u003eJoin our Discord\u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n\r\n---\r\n\r\n## Documentation\r\n\r\n- [Usage Guide](docs/USAGE.md) - Detailed instructions for each mode\r\n- [Distributed Agents](docs/DISTRIBUTED_AGENTS.md) - Remote sensor node deployment\r\n- [Hardware Guide](docs/HARDWARE.md) - SDR hardware and advanced setup\r\n- [Troubleshooting](docs/TROUBLESHOOTING.md) - Common issues and solutions\r\n- [Security](docs/SECURITY.md) - Network security and best practices\r\n\r\n---\r\n\r\n## Disclaimer\r\n\r\nThis project was developed using AI as a coding partner, combining human direction with AI-assisted implementation. The goal: make Software Defined Radio more accessible by providing a clean, unified interface for common SDR tools.\r\n\r\n**This software is for educational and authorized testing purposes only.**\r\n\r\n- Only use with proper authorization\r\n- Intercepting communications without consent may be illegal\r\n- You are responsible for compliance with applicable laws\r\n\r\n---\r\n\r\n## License\r\n\r\nApache 2.0 License - see [LICENSE](LICENSE)\r\n\r\n## Author\r\n\r\nCreated by **smittix** - [GitHub](https://github.com/smittix)\r\n\r\n## Acknowledgments\r\n\r\n[rtl-sdr](https://osmocom.org/projects/rtl-sdr/wiki) |\r\n[multimon-ng](https://github.com/EliasOenal/multimon-ng) |\r\n[rtl_433](https://github.com/merbanan/rtl_433) |\r\n[dump1090](https://github.com/flightaware/dump1090) |\r\n[AIS-catcher](https://github.com/jvde-github/AIS-catcher) |\r\n[acarsdec](https://github.com/TLeconte/acarsdec) |\r\n[direwolf](https://github.com/wb2osz/direwolf) |\r\n[rtlamr](https://github.com/bemasher/rtlamr) |\r\n[dumpvdl2](https://github.com/szpajder/dumpvdl2) |\r\n[aircrack-ng](https://www.aircrack-ng.org/) |\r\n[Leaflet.js](https://leafletjs.com/) |\r\n[SatDump](https://github.com/SatDump/SatDump) |\r\n[Celestrak](https://celestrak.org/) |\r\n[Priyom.org](https://priyom.org/)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","funding_links":["https://buymeacoffee.com/smittix","https://www.buymeacoffee.com/smittix"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmittix%2Fintercept","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmittix%2Fintercept","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmittix%2Fintercept/lists"}