
Ferramenta CLI para inspecionar e gerenciar serviços escutando em portas localhost
O Sonar mostra tudo o que está à escuta em localhost e organiza-o: cada porta
pertence a um grupo — normalmente o repositório a partir do qual foi iniciado — e
dentro desse grupo a um serviço com nome. Inicie os seus servidores de desenvolvimento com
sonar start e o projeto inteiro torna-se uma coisa que pode listar como uma árvore,
aguardar, seguir e parar com um único comando. Contentores Docker, projetos Compose
e processos que iniciou manualmente também são detetados, sem qualquer
configuração.```
$ sonar list --tree
my-app (3 ports, running) ~/code/my-app
├─ 5432 db postgres:17 http://localhost:5432
├─ 5173 frontend vite (v5.4) http://localhost:5173
└─ 8000 api uvicorn app:app http://localhost:8000
ungrouped (1 port)
└─ 3000 next-server (v16.1.6) http://localhost:3000
## Instalação
### Homebrew (macOS / Linux)```sh
brew install raskrebs/sonar/sonar
Homebrew 6 recusa fórmulas de taps de terceiros até que você confie no tap uma vez
(Error: Refusing to load formula raskrebs/sonar/sonar from untrusted tap):```sh
brew trust raskrebs/sonar
### Script de instalação```sh
curl -sfL https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.sh | bash
Baixa o binário mais recente para ~/.local/bin e adiciona-o ao seu PATH, se necessário. Reinicie o terminal ou execute source ~/.zshrc.
No Windows (PowerShell):```powershell irm https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.ps1 | iex
Local de instalação personalizado:```sh
curl -sfL https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.sh | SONAR_INSTALL_DIR=/usr/local/bin bash
Instale uma versão específica:```sh curl -sfL https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.sh | SONAR_VERSION=vX.Y.Z bash
| `--no-color` | Desativa a saída colorida |
| `--verbose` | Ativa o registro detalhado |
| `--quiet` | Suprime toda a saída, exceto erros |
| `--output <file>` | Grava a saída em um arquivo |
| `--format <type>` | Especifica o formato de saída (json, yaml, table) |
| `--config <path>` | Caminho para o arquivo de configuração |
| `--timeout <seconds>` | Define o tempo limite da operação |
| `--retry <count>` | Número de tentativas em caso de falha |
| `--proxy <url>` | Usa o proxy especificado para conexões |
| `--insecure` | Ignora a verificação de certificado TLS |
| `--user-agent <string>` | Define o cabeçalho User-Agent personalizado |
| `--header <key:value>` | Adiciona um cabeçalho HTTP personalizado |
| `--cookie <string>` | Envia cookies com a requisição |
| `--data <string>` | Envia dados no corpo da requisição |
| `--method <verb>` | Especifica o método HTTP |
| `--follow-redirects` | Segue redirecionamentos HTTP |
| `--max-redirects <n>` | Número máximo de redirecionamentos a seguir |
| `--threads <n>` | Número de threads concorrentes |
| `--rate-limit <n>` | Limita as requisições por segundo |
| `--wordlist <path>` | Caminho para o arquivo de wordlist |
| `--extensions <list>` | Extensões de arquivo a testar |
| `--exclude <pattern>` | Exclui resultados correspondentes ao padrão |
| `--include <pattern>` | Inclui apenas resultados correspondentes ao padrão |
| `--silent` | Modo silencioso, exibe apenas resultados |
| `--debug` | Ativa a saída de depuração |
| `--version` | Exibe a versão do programa |
| `--help` | Exibe a mensagem de ajuda |
### Exemplos
```bash
# Verificação básica
tool --target example.com
# Verificação com opções personalizadas
tool --target example.com --threads 10 --timeout 30 --output results.json
# Usando um arquivo de configuração
tool --config config.yaml
# Verificação com wordlist personalizada
tool --target example.com --wordlist /path/to/wordlist.txt --extensions php,html,js
Se você encontrar problemas, verifique o seguinte:
Para mais assistência, consulte a documentação ou abra uma issue no repositório do GitHub.```powershell $env:SONAR_VERSION="vX.Y.Z"; irm https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.ps1 | iex
### Usando Go```sh
go install github.com/raskrebs/sonar@latest
Conclusões de shell (números de porta com preenchimento por tabulação):```sh sonar completion zsh > "${fpath[1]}/_sonar" # zsh sonar completion bash > /etc/bash_completion.d/sonar # bash sonar completion fish | source # fish
## Sessenta segundos
Descreva como o seu projeto é executado em um `sonar.yaml` na raiz do repositório, em
vez de um `dev.sh`:```yaml
name: my-app
services:
- name: db
cmd: docker compose up db
port: 5432
- name: api
cmd: uv run uvicorn app:app --port ${port}
port: auto
depends_on: [db]
- name: frontend
cmd: npm run dev -- --port ${port} --strictPort
port: auto
depends_on: [api]
env:
VITE_API_URL: ${api.url}
Em seguida, inicie-o:```sh sonar start
## Instalação
### Requisitos
- Python 3.8+
- pip
### Instalação via pip
```bash
pip install pycryptodome
git clone https://github.com/example/crypto-tool.git
cd crypto-tool
pip install -r requirements.txt
from crypto_tool import Cipher
cipher = Cipher(key="my-secret-key")
encrypted = cipher.encrypt("Hello, World!")
print(encrypted)
python crypto_tool.py --help
| Opção | Descrição |
|---|---|
-k, --key | Chave de encriptação |
-f, --file | Ficheiro de entrada |
-o, --output | Ficheiro de saída |
-v, --verbose | Ativar saída detalhada |
As definições de configuração podem ser definidas através de variáveis de ambiente:
CRYPTO_KEY - Chave de encriptação predefinidaCRYPTO_ALGO - Algoritmo a utilizar (predefinição: AES-256)CRYPTO_DEBUG - Ativar modo de depuraçãopython crypto_tool.py -k "secret" -f input.txt -o output.enc
python crypto_tool.py -k "secret" -f output.enc -o decrypted.txt
Este projeto está licenciado sob a Licença MIT - consulte o ficheiro LICENSE para mais detalhes.``` ✓ db http://localhost:5432 pid 41022 ~/.config/sonar/logs/my-app/db.log ✓ api http://localhost:21408 pid 41040 ~/.config/sonar/logs/my-app/api.log ✓ frontend http://localhost:21409 pid 41077 ~/.config/sonar/logs/my-app/frontend.log
3 started following the logs; Ctrl+C stops the 3 services started here api | INFO: Uvicorn running on http://127.0.0.1:21408 frontend | VITE v5.4 ready in 312 ms
O Sonar escolhe uma porta livre para cada serviço `port: auto` e informa a cada serviço onde os outros estão, para que um segundo worktree seja executado ao lado do primeiro sem que uma única porta entre em conflito. `sonar start -d` faz o mesmo em segundo plano, e `sonar down` o interrompe e devolve as portas. Em outro terminal:```sh
sonar list --tree