
Painel de fusão de inteligência de múltiplas fontes — feeds de WiFi, celular, CCTV, ADS-B, orbital e SDR unificados em um único mapa tático. Apenas para pesquisa de segurança.
Uma plataforma de fusão de inteligência de sinais de espectro completo e de múltiplas fontes para pesquisa e treinamento em segurança. O Signal OPS reúne dezenas de fontes de coleta abertas — bancos de dados de WiFi/Bluetooth/torres de celular, scanners de exposição à internet, índices de câmeras, feeds de voo ADS-B, rastreamento de satélites TLE e redes SDR/APRS — em um único mapa tático e API Flask, correlacionando os domínios RF, celular, espaço aéreo, orbital e de vigilância em um único quadro operacional em tempo real, com resumos opcionais de ameaças assistidos por IA sobrepostos.
Quase todas as fontes são opcionais. Se uma chave não estiver definida, esse buscador é ignorado normalmente — as fontes gratuitas (OpenStreetMap, Insecam, ipinfo.io, ADS-B, CelesTrak, KiwiSDR) funcionam sem nenhuma chave.
O mapa principal funde camadas de WiFi, Bluetooth, celular, câmeras e aeronaves sobre a mesma área, com sobreposições alternáveis para câmeras OSM, redes ALPR/Flock e delegacias de polícia.


| Feed de vigilância | Descoberta de CCTV |
|---|---|
![]() | ![]() |
A lista de vigilância pontua cada dispositivo (por exemplo, "Suspeita 35/100: câmera não autenticada") e mescla roteadores, TVs e câmeras expostas do WiGLE, Insecam e OSM. A visão CCTV agrupa as câmeras descobertas por fonte, com risco por câmera e status ao vivo/metadados.
| Mapa de calor de torres de celular | Rede SDR / APRS |
|---|---|
![]() | ![]() |
Dependências principais:
flask
requests
python-dotenv
Recomendado (habilita funcionalidade completa — cache, limitação de taxa, propagação de satélites):
cachetools # geo-cache limitada (usa um dict ilimitado como fallback se ausente)
flask-limiter # limitação de taxa de requisições
sgp4 # propagação de posição de satélites para /api/satellites
google-genai # análise de IA Gemini (apenas se você usar GEMINI_API_KEY)
Instale tudo:
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
Se você não tiver um requirements.txt, use a linha pip install da seção Requisitos acima.
Copie o arquivo de exemplo e preencha as chaves que você possui:
cp .env.example .env
Em seguida, abra .env e cole suas chaves de API. Toda chave é opcional — deixe qualquer linha em branco (ou exclua-a) para desabilitar essa fonte. Veja a próxima seção para saber o que cada uma faz e onde obtê-la.
Para consultas instantâneas e offline de câmeras e delegacias, coloque estes arquivos em um diretório data/ (ou aponte DATA_DIR para outro local):
data/CAMERAS_WITH_NETWORK_DATA.geojson # Feições de ponto (câmeras)
data/police_precincts_usa.geojson # Feições de polígono (delegacias dos EUA)
data/camera_networks.json # metadados de compartilhamento de rede
data/tiles/{z}/{x}/{y}.json # conjunto de dados de câmeras em tiles (opcional)
Se esses arquivos estiverem ausentes, o aplicativo automaticamente recorre a consultas ao vivo do OpenStreetMap Overpass.
python app_v2.py
O servidor inicia em http://0.0.0.0:8080. Abra http://localhost:8080 no seu navegador.
Verifique quais provedores carregaram com sucesso a qualquer momento:
GET /api/status # chaves ativas vs. ausentes
GET /api/debug # booleano por chave + teste de autenticação WiGLE ao vivo
Crie um arquivo .env na raiz do projeto. Abaixo está a lista completa lida pelo aplicativo.
Estas não precisam de configuração: OpenStreetMap Overpass, Insecam, EarthCam, ipinfo.io, ADS-B (adsb.fi / OpenSky), CelesTrak TLE, SatNOGS e KiwiSDR.
.env.exampleSalve isto como .env.example no seu repositório para que outros saibam o formato:
# ── Ambiente Signal OPS ──
# Toda chave é opcional. Deixe em branco para desabilitar essa fonte.
# WiFi / Bluetooth / Celular
WIGLE_API_NAME=
WIGLE_API_TOKEN=
OPENCELLID_API_KEY=
# Scanners de exposição à internet
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=
# Câmeras e reputação de IP
WINDY_API_KEY=
ABUSEIPDB_API_KEY=
# Aeronaves e rádio amador
ADSB_API_KEY=
APRS_FI_KEY=
# Análise de IA
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.0-flash
# Configuração do aplicativo
DATA_DIR=./data
FLASK_SECRET_KEY=
Uma seleção dos endpoints expostos (veja o código-fonte para o conjunto completo):
| Variável | Provedor | Obtenha uma chave em |
|---|
WIGLE_API_NAME | WiGLE (WiFi/BT/celular) — nome de usuário | https://wigle.net/account |
WIGLE_API_TOKEN | WiGLE — token de API | https://wigle.net/account |
OPENCELLID_API_KEY | OpenCellID (torres de celular) | https://opencellid.org |
SHODAN_API_KEY | Shodan (exposição / câmeras) | https://account.shodan.io |
CENSYS_API_ID | Censys — ID de API | https://search.censys.io/account/api |
CENSYS_API_SECRET | Censys — segredo de API | https://search.censys.io/account/api |
ZOOMEYE_API_KEY | ZoomEye | https://www.zoomeye.org/profile |
FOFA_EMAIL | FOFA — e-mail da conta | https://fofa.info |
FOFA_API_KEY | FOFA — chave de 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 (reputação de IP) | https://www.abuseipdb.com/account/api |
ADSB_API_KEY | adsb.fi (opcional; funciona sem) | https://adsb.fi |
APRS_FI_KEY | APRS.fi (estações de rádio amador) | https://aprs.fi/page/api_key |
GEMINI_API_KEY | Google Gemini (análise de IA) | https://aistudio.google.com/apikey |
| Variável | Padrão | Descrição |
|---|
GEMINI_MODEL | gemini-2.0-flash | Modelo Gemini usado para análise |
DATA_DIR | ./data | Diretório para conjuntos de dados locais GeoJSON/JSON |
FLASK_SECRET_KEY | aleatório por execução | Segredo de sessão do Flask; defina um valor fixo em produção |
| Endpoint | Finalidade |
|---|
GET /nearby?lat=&lon=&mode= | Varredura unificada RF/OSINT ao redor de um ponto |
GET /api/cctv?lat=&lon= ou ?country= | Descoberta de câmeras por localização ou país |
GET /api/search?type=&query= | Pesquisa por SSID, IP, localização ou país |
POST /api/analyze | Resumo de IA de uma lista de dispositivos |
GET /api/ip-intel?ip= | Inteligência de ameaças IP de múltiplas fontes |
GET /api/adsb?lat=&lon=&radius= | Aeronaves ao vivo + detecção de emergência |
GET /api/satellites?categories= | Posições de satélites (TLE + SGP4) |
GET /api/gps-jamming?lat=&lon= | Mapa de calor de interferência GPS do ADS-B |
GET /api/sdr/kiwisdr | Lista pública de receptores KiwiSDR |
GET /api/aprs/stations?lat=&lon= | Estações APRS próximas |
GET/POST /api/watchlist | Gerenciar identificadores rastreados |
POST /api/watchlist/check | Verificar uma lista de dispositivos contra a lista de vigilância |
GET /api/status · GET /api/debug | Saúde do provedor / diagnóstico de chaves |