# 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. - `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://:6379/0`, e use o mesmo `RTSP_QUEUE_NAME`. 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://:554/` 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](/home/valmo/Documents/CamFinder/rtsp_paths.txt). Exemplo: ```bash cargo run -- rtsp --targets-file targets.csv ``` No fluxo `docker-compose.redis-rtsp.yml`, os workers salvam os frames em `dump/feeds/_.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`.