
Единая панель интеграции разведданных со всех источников — потоки данных WiFi, сотовой связи, CCTV, ADS-B, орбитальные и SDR-каналы объединены на единой тактической карте. Только для исследовательских целей в области безопасности.
Полноспектральная платформа слияния сигнальной разведки из всех источников для исследований и обучения в области безопасности. Signal OPS объединяет десятки открытых источников сбора данных — базы WiFi/Bluetooth/сотовых вышек, сканеры интернет-экспозиции, индексы камер, потоки ADS-B авиарейсов, спутниковое отслеживание TLE и сети SDR/APRS — в единую тактическую карту и Flask API, коррелируя радиочастотную, сотовую, воздушную, орбитальную и наблюдательную области в единую оперативную картину реального времени, с опциональными AI-ассистируемыми сводками угроз поверх.
Почти каждый источник опционален. Если ключ не задан, соответствующий загрузчик корректно пропускается — бесплатные источники (OpenStreetMap, Insecam, ipinfo.io, ADS-B, CelesTrak, KiwiSDR) работают вообще без ключей.
Основная карта объединяет слои WiFi, Bluetooth, сотовых, камер и воздушных судов над одной областью, с переключаемыми оверлеями для камер OSM, сетей ALPR/Flock и полицейских участков.


| Лента наблюдения | Обнаружение CCTV |
|---|---|
![]() | ![]() |
Список наблюдения оценивает каждое устройство (например, «Подозрение 35/100: Неаутентифицированная камера») и объединяет маршрутизаторы, телевизоры и открытые камеры из WiGLE, Insecam и OSM. Представление CCTV группирует обнаруженные камеры по источникам с оценкой риска для каждой камеры и статусом живого/метаданных.
| Тепловая карта сотовых вышек | Сеть SDR / APRS |
|---|---|
![]() | ![]() |
Основные зависимости:
flask
requests
python-dotenv
Рекомендуемые (включают полную функциональность — кэширование, ограничение скорости, распространение спутников):
cachetools # ограниченный гео-кэш (использует неограниченный dict, если отсутствует)
flask-limiter # ограничение скорости запросов
sgp4 # распространение позиций спутников для /api/satellites
google-genai # AI-анализ Gemini (только если используется GEMINI_API_KEY)
Установка всего:
pip install flask requests python-dotenv cachetools flask-limiter sgp4 google-genai
git https://github.com/emrekybs/signalops.git
unzip signalops-v1.zip
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
Если у вас нет requirements.txt, используйте строку pip install из раздела «Требования» выше.
Скопируйте пример файла и заполните ключи, которые у вас есть:
cp .env.example .env
Затем откройте .env и вставьте ваши API-ключи. Каждый ключ опционален — оставьте любую строку пустой (или удалите её), чтобы отключить этот источник. См. следующий раздел о том, что делает каждый ключ и где его получить.
Для мгновенного офлайн-поиска камер и участков разместите эти файлы в каталоге data/ (или укажите DATA_DIR в другом месте):
data/CAMERAS_WITH_NETWORK_DATA.geojson # Точечные объекты (камеры)
data/police_precincts_usa.geojson # Полигональные объекты (участки США)
data/camera_networks.json # метаданные совместного использования сетей
data/tiles/{z}/{x}/{y}.json # опциональный тайловый набор данных камер
Если эти файлы отсутствуют, приложение автоматически переключается на живые запросы OpenStreetMap Overpass.
python app_v2.py
Сервер запускается на http://0.0.0.0:8080. Откройте http://localhost:8080 в вашем браузере.
Проверьте, какие провайдеры загрузились успешно, в любое время:
GET /api/status # активные vs. отсутствующие ключи
GET /api/debug # логическое значение по ключу + живой тест аутентификации WiGLE
Создайте файл .env в корне проекта. Ниже приведён полный список переменных, читаемых приложением.
Эти не требуют настройки: OpenStreetMap Overpass, Insecam, EarthCam, ipinfo.io, ADS-B (adsb.fi / OpenSky), CelesTrak TLE, SatNOGS и KiwiSDR.
.env.exampleСохраните это как .env.example в вашем репозитории, чтобы другие знали формат:
# ── Окружение Signal OPS ──
# Каждый ключ опционален. Оставьте пустым, чтобы отключить этот источник.
# WiFi / Bluetooth / Сотовая
WIGLE_API_NAME=
WIGLE_API_TOKEN=
OPENCELLID_API_KEY=
# Сканеры интернет-экспозиции
SHODAN_API_KEY=
CENSYS_API_ID=
CENSYS_API_SECRET=
ZOOMEYE_API_KEY=
FOFA_EMAIL=
FOFA_API_KEY=
HUNTERHOW_API_KEY=
NETLAS_API_KEY=
LEAKIX_API_KEY=
CRIMINALIP_API_KEY=
BINARYEDGE_API_KEY=
# Камеры и репутация IP
WINDY_API_KEY=
ABUSEIPDB_API_KEY=
# Воздушные суда и любительское радио
ADSB_API_KEY=
APRS_FI_KEY=
# AI-анализ
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.0-flash
# Конфигурация приложения
DATA_DIR=./data
FLASK_SECRET_KEY=
Выборка доступных конечных точек (полный набор см. в исходном коде):
| Переменная | Провайдер | Получить ключ на |
|---|
WIGLE_API_NAME | WiGLE (WiFi/BT/сотовая) — имя пользователя | https://wigle.net/account |
WIGLE_API_TOKEN | WiGLE — API-токен | https://wigle.net/account |
OPENCELLID_API_KEY | OpenCellID (сотовые вышки) | https://opencellid.org |
SHODAN_API_KEY | Shodan (экспозиция / камеры) | https://account.shodan.io |
CENSYS_API_ID | Censys — API ID | https://search.censys.io/account/api |
CENSYS_API_SECRET | Censys — API-секрет | https://search.censys.io/account/api |
ZOOMEYE_API_KEY | ZoomEye | https://www.zoomeye.org/profile |
FOFA_EMAIL | FOFA — email аккаунта | https://fofa.info |
FOFA_API_KEY | FOFA — API-ключ | https://fofa.info |
HUNTERHOW_API_KEY | Hunter.how | https://hunter.how |
NETLAS_API_KEY | Netlas | https://netlas.io |
LEAKIX_API_KEY | LeakIX | https://leakix.net |
CRIMINALIP_API_KEY | CriminalIP | https://www.criminalip.io |
BINARYEDGE_API_KEY | BinaryEdge | https://www.binaryedge.io |
WINDY_API_KEY | Windy Webcams | https://api.windy.com/keys |
ABUSEIPDB_API_KEY | AbuseIPDB (репутация IP) | https://www.abuseipdb.com/account/api |
ADSB_API_KEY | adsb.fi (опционально; работает без) | https://adsb.fi |
APRS_FI_KEY | APRS.fi (радиостанции любительской связи) | https://aprs.fi/page/api_key |
GEMINI_API_KEY | Google Gemini (AI-анализ) | https://aistudio.google.com/apikey |
| Переменная | По умолчанию | Описание |
|---|
GEMINI_MODEL | gemini-2.0-flash | Модель Gemini, используемая для анализа |
DATA_DIR | ./data | Каталог для локальных наборов данных GeoJSON/JSON |
FLASK_SECRET_KEY | случайный при каждом запуске | Секрет сессии Flask; задайте фиксированное значение в продакшене |
| Конечная точка | Назначение |
|---|
GET /nearby?lat=&lon=&mode= | Единое RF/OSINT сканирование вокруг точки |
GET /api/cctv?lat=&lon= или ?country= | Обнаружение камер по местоположению или стране |
GET /api/search?type=&query= | Поиск по SSID, IP, местоположению или стране |
POST /api/analyze | AI-сводка списка устройств |
GET /api/ip-intel?ip= | Многоисточниковая IP-разведка угроз |
GET /api/adsb?lat=&lon=&radius= | Живые воздушные суда + обнаружение аварийных ситуаций |
GET /api/satellites?categories= | Позиции спутников (TLE + SGP4) |
GET /api/gps-jamming?lat=&lon= | Тепловая карта GPS-глушения из ADS-B |
GET /api/sdr/kiwisdr | Список публичных приёмников KiwiSDR |
GET /api/aprs/stations?lat=&lon= | Ближайшие станции APRS |
GET/POST /api/watchlist | Управление отслеживаемыми идентификаторами |
POST /api/watchlist/check | Проверка списка устройств по списку наблюдения |
GET /api/status · GET /api/debug | Состояние провайдеров / диагностика ключей |