Files
2026-06-30 01:49:11 -03:00

3.1 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

  1. Copie .env.example para .env.
  2. Configure DATABASE_URL apontando para um Postgres acessível.
  3. Rode cargo run -- local, cargo run -- coordinator ou cargo run -- worker.
  4. Para RTSP, rode cargo run -- rtsp --targets-file targets.csv.

Docker Compose

O docker-compose.yml já sobe:

  • postgres para persistência.
  • coordinator exposto no host pela porta 666.
  • worker conectado ao coordenador na rede interna do compose.

Para o fluxo RTSP com Redis, use docker-compose.redis-rtsp.yml:

  • redis como fila. Ele publica a porta 6379, então workers externos podem apontar REDIS_URL para esse host.
  • coordinator para ler camfinder-open-rtsp.csv e alimentar a fila com blocos de IPs. No modo simples/local, monte o repositório inteiro em /app.
  • worker-1 e worker-2 para consumir blocos, testar paths RTSP e salvar screenshots e SQLite.

Para escalar workers:

  • docker compose up --scale worker=3

Para um worker em outra máquina, aponte REDIS_URL para o Redis do coordenador, por exemplo redis://<host>:6379/0, e use o mesmo RTSP_QUEUE_NAME.

Se estiver usando o compose local, monte ./:/app para coordinator e workers RTSP. O coordinator lê camfinder-open-rtsp.csv e rtsp_paths.txt da raiz do repo.

Para workers de outras máquinas, use vps.valmo.dev:666 como endereço do coordenador.

Scripts

  • cargo build
  • cargo run
  • npm run scan
  • npm run coord
  • npm run worker

Variáveis úteis

  • DATABASE_URL
  • SCAN_CIDRS
  • SCAN_CIDR
  • SCAN_CIDR_FILE
  • SCAN_CONCURRENCY
  • SCAN_CHUNK_SIZE
  • SCAN_TIMEOUT_MS
  • SCAN_MODE
  • COORDINATOR_BIND
  • COORDINATOR_ADDR
  • WORKER_NAME
  • RTSP_TARGETS
  • RTSP_TARGETS_FILE
  • RTSP_PATHS
  • RTSP_PATHS_FILE
  • REDIS_URL
  • RTSP_QUEUE_NAME
  • RTSP_INPUT_CSV
  • RTSP_WORKER_COUNT
  • RTSP_QUEUE_BLOCK_SIZE
  • RTSP_SNAPSHOT_DIR
  • RTSP_SQLITE_PATH
  • RTSP_CAPTURE_TIMEOUT_MS

Modo RTSP

O modo rtsp monta URLs no formato rtsp://<host>:554/<path> e testa a conexão via DESCRIBE, tentando primeiro sem auth e depois cruzando os usuários e senhas padrão definidos em main_ids.json.

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.