2.5 KiB
CamFinder
Scanner TCP em Rust para descobrir hosts em CIDRs internos, testar a porta 554 e salvar progresso e endpoints abertos em PostgreSQL.
O projeto tem quatro modos:
local: roda o scan inteiro no processo atual.coordinator: recebe conexões de workers, distribui blocos e grava resultados no banco.worker: conecta ao coordenador, recebe blocos e testa os hosts.rtsp: lê destinos de um CSV e testa URLs RTSP com paths predefinidos.
O progresso é salvo por bloco, então o scan pode ser retomado sem repetir o que já foi concluído.
Uso
- Copie
.env.examplepara.env. - Configure
DATABASE_URLapontando para um Postgres acessível. - Rode
cargo run -- local,cargo run -- coordinatoroucargo run -- worker. - Para RTSP, rode
cargo run -- rtsp --targets-file targets.csv.
Docker Compose
O docker-compose.yml já sobe:
postgrespara persistência.coordinatorexposto no host pela porta666.workerconectado ao coordenador na rede interna do compose.
Para o fluxo RTSP com Redis, use docker-compose.redis-rtsp.yml:
rediscomo fila.coordinatorpara lercamfinder-open-rtsp.csve alimentar a fila.worker-1eworker-2para consumir IPs, testar paths RTSP e salvar screenshots e SQLite.
Para escalar workers:
docker compose up --scale worker=3
Para workers de outras máquinas, use vps.valmo.dev:666 como endereço do coordenador.
Scripts
cargo buildcargo runnpm run scannpm run coordnpm run worker
Variáveis úteis
DATABASE_URLSCAN_CIDRSSCAN_CIDRSCAN_CIDR_FILESCAN_CONCURRENCYSCAN_CHUNK_SIZESCAN_TIMEOUT_MSSCAN_MODECOORDINATOR_BINDCOORDINATOR_ADDRWORKER_NAMERTSP_TARGETSRTSP_TARGETS_FILERTSP_PATHSRTSP_PATHS_FILEREDIS_URLRTSP_QUEUE_NAMERTSP_INPUT_CSVRTSP_WORKER_COUNTRTSP_SNAPSHOT_DIRRTSP_SQLITE_PATHRTSP_CAPTURE_TIMEOUT_MS
Modo RTSP
O modo rtsp monta URLs no formato rtsp://<host>:554/<path> e testa a conexão
via DESCRIBE, sem tentar usuário, senha ou variações de autenticação.
Por padrão, ele lê os paths de rtsp_paths.txt.
Exemplo:
cargo run -- rtsp --targets-file targets.csv
No fluxo docker-compose.redis-rtsp.yml, os workers salvam os frames em
dump/feeds/<ip>_<timestamp>.png e gravam os resultados em
dump/rtsp-results.sqlite.
Restrições
O projeto aceita somente redes privadas 10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16.