2.9 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. Ele publica a porta6379, então workers externos podem apontarREDIS_URLpara esse host.coordinatorpara lercamfinder-open-rtsp.csve alimentar a fila com blocos de IPs. O CSV também é copiado para a imagem, então o deploy não depende só de bind mount.worker-1eworker-2para 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.
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_QUEUE_BLOCK_SIZERTSP_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, 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.