
bitbang-cli v0.5.0
Stabilisci un accesso remoto sicuro a una macchina con shell interattiva, trasferimento file e proxy web tramite WebRTC peer-to-peer crittografato end-to-end, usando un browser o CLI senza inoltro di porte o account.
BitBang CLI
bitbang è un multitool di accesso remoto composto da un singolo binario statico. Da qualsiasi browser: una shell interattiva e un browser di file per accedere alla macchina remota. Puoi anche raggiungere le applicazioni web sulla rete di quella macchina. Oltre al browser, offre inoltro di porte TCP, copia di file e condivisione del terminale. Non richiede account né configurazione: funziona e basta.

Sulla macchina che vuoi raggiungere:``` curl -sSfL bitba.ng/install | sh bitbang serve
`serve` stampa un URL. Aprilo in qualsiasi browser e ottieni un terminale, un file browser e un proxy verso la rete di quella macchina — oppure raggiungi la stessa macchina da un altro terminale con `bitbang connect <url>`, che aggiunge il port forwarding (`-L`) e la copia di file (`bitbang cp`). La connessione è crittografata end-to-end e peer-to-peer; il server `bitba.ng` presenta le due estremità, poi si fa da parte.
`bitbang` è un singolo binario Go statico. Fa parte del [progetto BitBang](https://github.com/richlegrand/bitbang); questo [whitepaper](https://github.com/richlegrand/bitbang/blob/main/whitepaper.md) copre il design in dettaglio.
## Come si confronta
| | ngrok | Tailscale | `bitbang` |
| ------------------------------ | ---------------------- | ------------------------------ | ------------------- |
| Configurazione prima del primo utilizzo | Account + authtoken | Account + login su ogni dispositivo | **Esegui un solo comando** |
| Per condividere qualcosa, esegui | un web server, più ngrok | il loro client su entrambe le macchine | **`bitbang serve`** |
| Cosa ottiene un browser all'estremità remota | il web server che stavi già eseguendo | niente — richiede il loro client | **un terminale, un file browser e web app sulla rete remota** |
| Percorso dei dati | i loro server | P2P (fallback relay) | **P2P (fallback relay)** |
| Crittografato end-to-end | Non di default | Sì | **Sì** |
## Ricette rapide
**Raggiungi un servizio a casa**
- [Monta il tuo NAS di casa da qualsiasi luogo (SMB)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#mount-your-home-nas-from-anywhere-smb)
- [Guarda la tua libreria multimediale da qualsiasi luogo (Jellyfin)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#watch-your-media-library-from-anywhere-jellyfin)
- [Usa il tuo LLM da qualsiasi luogo (Ollama, Open WebUI)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#use-your-own-llm-from-anywhere-ollama-open-webui)
- [Controlla le tue telecamere di sicurezza (Frigate)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#check-your-security-cameras-frigate)
- [Raggiungi la tua domotica senza esporla (Home Assistant)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-your-home-automation-without-exposing-it-home-assistant)
- [Stampa sulla tua stampante di casa (IPP, CUPS)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#print-to-your-home-printer-ipp-cups)
**Accedi a una macchina**
- [Ottieni una shell su una macchina dietro NAT](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#get-a-shell-on-a-machine-behind-nat)
- [Ottieni una shell dal tuo telefono](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#get-a-shell-from-your-phone)
- [Desktop remoto su una macchina Windows (RDP)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#remote-desktop-into-a-windows-machine-rdp)
- [Raggiungi un desktop Linux o Mac (VNC)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-a-linux-or-mac-desktop-vnc)
- [SSH verso una macchina senza porte aperte (OpenSSH)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#ssh-to-a-machine-with-no-open-port-openssh)
- [Configura un Raspberry Pi headless](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#set-up-a-headless-raspberry-pi)
**Condividi con qualcun altro**
La condivisione consiste semplicemente nel dare a qualcuno un URL univoco o un codice QR che gli garantisce l'accesso. Le autorizzazioni possono essere personalizzate e impostate per scadere in minuti, ore, ecc.
- [Condividi file senza caricarli da nessuna parte](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#share-files-without-uploading-them-anywhere)
- [Mostra a qualcuno il tuo progetto](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#show-someone-your-project)
- [Dai a qualcuno un accesso che scade](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#give-someone-access-that-expires)
- [Controlla la tua sessione agente dal telefono (Claude Code, tmux)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#check-your-agent-session-from-your-phone-claude-code-tmux)
- [Ripara il router di qualcun altro](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#fix-someone-elses-router)
**Sviluppo e dispositivi**
- [Raggiungi un database dalla tua macchina di sviluppo (Postgres, MySQL)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-a-database-from-your-dev-machine-postgres-mysql)
- [Sincronizza dispositivi che non riescono a trovarsi (Syncthing)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#sync-devices-that-cannot-find-each-other-syncthing)
- [Guarda un robot da un browser (ROS, Foxglove)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#watch-a-robot-from-a-browser-ros-foxglove)
**Tecniche**
- [Cosa espone un listener di forwarding](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#what-a-forwarding-listener-exposes)
- [Consenti ad altre macchine sulla tua LAN di usare un forward](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#let-other-machines-on-your-lan-use-a-forward)
- [Noto per non funzionare](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#known-not-to-work)
## Usare `bitbang`
Ogni connessione ha due estremità: un **listener** (`bitbang serve`, in esecuzione sulla macchina da raggiungere) e un **connector** (un browser, o la CLI `bitbang`, sulla macchina che effettua la connessione). Un singolo URL del listener serve entrambi i tipi di connector.
### Il listener: `bitbang serve````
bitbang serve # everything: shell + proxy + files + forward
bitbang serve shell # just a terminal
bitbang serve files ~/share # just a directory (-files-upload to allow uploads)
bitbang serve proxy localhost:8080 # just one web app, straight at the URL
bitbang serve proxy a.lan:80,b.lan:80 # ...or several, chosen in the browser
bitbang serve forward 127.0.0.1:22 # just TCP, for `connect -L`
bitbang serve shell files ~/share proxy nas.lan:8096 # any combination
Ciascuna stampa un codice QR, un URL e un codice di accoppiamento. La modalità determina cosa può fare l'ascoltatore: serve shell non ha alcun forwarding da concedere, e un listener solo-forward non avvia mai una shell, quindi non c'è nulla da elevare.
Un default che vale la pena conoscere: il forwarding e il proxy raggiungono qualsiasi host:porta che il listener può raggiungere, non solo quello che avevi in mente, quindi un link distribuito per un database raggiunge anche il resto di quella rete. Nominare i target dopo la parola restringe il campo -- forward db.internal:5432 raggiunge quello e nient'altro.
Condivisione di una sessione in esecuzione: bitbang share
serve shell avvia una nuova shell. share pubblica una sessione tmux già in esecuzione:```
bitbang share # publish the current tmux session
bitbang share --read-only # publish without a control URL
bitbang share status|stop|rotate
Il comando restituisce il controllo dopo la pubblicazione, quindi `Ctrl-Z`, `bitbang share`, `fg`
funziona anche per un'attività già in corso. L'hosting richiede tmux 3.2+ su Unix o
WSL. I client Windows nativi possono aprire gli URL ma non possono ospitare una condivisione.
Per impostazione predefinita, il comando stampa due URL bearer:
- L'**URL di controllo** può digitare con la stessa autorità della tastiera locale.
Un solo controllore può connettersi alla volta.
- L'**URL di visualizzazione** è solo di osservazione. L'input viene scartato prima di raggiungere tmux, e
fino a `--max-viewers` spettatori possono connettersi contemporaneamente (default 16).
`--read-only` omette del tutto la credenziale di controllo. I limiti per spettatori e controllori
vengono mantenuti per l'intera durata di ogni connessione, anche prima che venga aperta una shell.
Le condivisioni restano attive finché non vengono fermate per impostazione predefinita; `--ttl` imposta una durata (ad es. `--ttl 1h`).
Gli URL di condivisione sono effimeri e non vengono mai salvati in `devices.json`. `share stop`,
la scadenza del TTL o la rimozione della sessione sorgente disconnette i peer remoti senza
fermare la sessione sorgente.
Rieseguire `bitbang share` ristampa gli URL della condivisione in esecuzione. Se
passi un flag in disaccordo con ciò che è in esecuzione (ad esempio `--read-only`
contro una condivisione che ha un URL di controllo), lo segnala invece di
restituire i vecchi URL; `bitbang share rotate` sostituisce la condivisione
con una che utilizza i nuovi flag.
Un worker in background viene eseguito in una sessione di gestione tmux staccata `_bbshare_*`,
quindi non c'è alcun demone o file PID da gestire.
La condivisione non modifica alcuna opzione di tmux. Con il default di tmux `window-size latest`, la
finestra segue il client di lettura-scrittura attivo; un singolo spettatore fornisce comunque
l'unica dimensione disponibile. Se `window-size` è stato sovrascritto, `share` lo segnala
ma non modifica la configurazione dell'utente.
### Distribuzione di accesso limitato: `bitbang link`
Un listener, un URL e tutti gli **access link** che ti servono. Ognuno è un
codice separato su quello stesso URL, che concede un sottoinsieme di ciò che il listener offre
e che facoltativamente scade a un'ora fissa:```
bitbang link edit # add entries in $EDITOR
bitbang link ls # what you have handed out
bitbang link rm <label> # revoke one
bitbang link qr <label> # its URL and QR code
Un entry è una riga di JSON in ~/.bitbang/bitbang/links.json. Scrivine uno senza
codice, ricarica il listener dalla sua console, e ne genera uno:```json
[
{"label": "ana", "grant": "files", "expires": "2026-09-01T00:00:00Z"},
{"label": "ben", "grant": "files /srv/photos"},
{"label": "dev", "grant": "shell forward 127.0.0.1:5432"}
]
## Installazione
### Requisiti
- Python 3.8 o superiore
- pip (gestore di pacchetti Python)
### Passaggi di installazione
1. Clona il repository:
```bash
git clone https://github.com/example/tool.git
cd tool
- Installa le dipendenze richieste:
pip install -r requirements.txt
- Verifica l'installazione:
python tool.py --version
Installazione opzionale
Per funzionalità avanzate, puoi installare dipendenze aggiuntive:
pip install -r requirements-optional.txt
Utilizzo
Comandi di base
python tool.py scan --target example.com
Opzioni disponibili
| Opzione | Descrizione |
|---|---|
--target | Specifica il target da scansionare |
--verbose | Abilita l'output dettagliato |
--output | Specifica il file di output |
--threads | Numero di thread da utilizzare |
Esempi
Scansione di base:
python tool.py scan --target example.com
Scansione con output dettagliato:
python tool.py scan --target example.com --verbose
Scansione con salvataggio dei risultati:
python tool.py scan --target example.com --output results.json
Configurazione
Il file di configurazione si trova in config.yaml. Puoi modificare le seguenti impostazioni:
# Configurazione dello strumento
tool:
timeout: 30
retries: 3
user_agent: "Mozilla/5.0"
# Impostazioni di scansione
scan:
threads: 10
ports: [80, 443, 8080]
protocols: ["http", "https"]
Risoluzione dei problemi
Errore: "Permission denied"
Se ricevi un errore di permessi, prova a eseguire con sudo:
sudo python tool.py scan --target example.com
Errore: "Module not found"
Assicurati di aver installato tutte le dipendenze:
pip install -r requirements.txt
Problemi di connessione
Se riscontri problemi di connessione, controlla le impostazioni del firewall e del proxy. Puoi configurare un proxy nel file config.yaml:
proxy:
http: "http://proxy.example.com:8080"
https: "https://proxy.example.com:8080"
Supporto
Per supporto, apri un issue su GitHub o contattaci via email all'indirizzo [email protected].
Licenza
Questo progetto è concesso in licenza sotto la MIT License. Vedi il file LICENSE per maggiori dettagli.```
0) owner files forward proxy shell
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#_vtQ0JCPe7s
- ana files expires in 6d https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#T-Ty_HhvLfY
- ben files /srv/photos https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#L6La8OzBO74
- dev forward 127.0.0.1:5432 shell https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#8kmI3LYzB7E
`owner` è il codice dell'identità stessa e concede tutto ciò che il listener serve; invia
uno degli altri. La console accetta sia l'etichetta sia il numero accanto
ad essa, quindi `rm 2` e `rm ben` fanno la stessa cosa.
Un `grant` è scritto nelle parole che `serve` accetta, e può solo restringere ciò che il
listener già serve. Ciò significa che un link non è limitato a selezionare capacità:
può nominare una sottodirectory della cartella condivisa, un sottoinsieme delle destinazioni di inoltro, o
un singolo comando per `shell`. Ometti `grant` e il link concede tutto ciò che il listener
fa. Chiedi qualcosa al di fuori della portata del listener e la console lo rifiuta con
lo stesso messaggio che `serve` ti darebbe.
L'etichetta è ciò che identifica un link, non i suoi termini, quindi due persone possono avere link
con grant e scadenza identici e puoi comunque revocarne uno senza toccare
l'altro.
La revoca e la scadenza raggiungono le sessioni già aperte: la connessione si chiude
e al titolare viene detto il motivo, invece di andare in silenzio. E un codice scaduto viene
ritirato piuttosto che messo in pausa -- rinnovare una voce ne genera uno nuovo, quindi l'URL che
hai già inviato resta morto.
### Abbinamento con un codice a 6 cifre
Quando non puoi incollare un URL o scansionare un codice QR, ad esempio quando sei al telefono, o a distanza di urlo, `bitbang serve` stampa anche un breve **codice di abbinamento**. L'altra parte apre `bitba.ng/<code>` (o esegue `bitbang connect <code>`), il suo schermo mostra un secondo numero a 6 cifre, e ti legge *quello* ad alta voce. Lo digiti tu per approvare. Un uomo nel mezzo non può far corrispondere i due numeri, e l'abbinamento salva le credenziali di connessione del dispositivo per la prossima volta, ad es. `bitbang connect nas1`. Se conosci [Magic Wormhole](https://github.com/magic-wormhole/magic-wormhole), la forma è simile -- un codice parlato che introduce in modo sicuro due macchine.

### Porta il tuo TURN
La maggior parte delle connessioni va direttamente peer-to-peer. Quando entrambe le estremità sono dietro un NAT che
non fa hole-punching, il traffico ha bisogno di un relay, e per impostazione predefinita è il nostro. `-ice-servers`
punta il listener al tuo invece:```
bitbang serve -ice-servers ~/turn.json
Il listener consegna la configurazione al server di segnalazione al momento della registrazione, e il server la fornisce a chiunque si connetta — quindi entrambe le estremità usano il tuo relay e il nostro non è mai coinvolto. Qualsiasi coturn, o un provider ospitato come Cloudflare o Twilio, funziona.
Il file è in JSON, in una di queste tre forme che il tuo provider ti ha fornito:```json [{"urls": ["turn:turn.example.net:3478"], "username": "user", "credential": "pass"}]
## Installazione
```bash
# Clona il repository
git clone https://github.com/example/tool.git
# Entra nella directory
cd tool
# Installa le dipendenze
pip install -r requirements.txt
Utilizzo
python tool.py --target example.com --output report.txt
Opzioni
| Opzione | Descrizione |
|---|---|
--target | Specifica il dominio o l'indirizzo IP di destinazione |
--output | Percorso del file di output per il report |
--verbose | Abilita l'output dettagliato |
--threads | Numero di thread da utilizzare (predefinito: 10) |
Esempi
Scansione di base
python tool.py --target example.com
Scansione avanzata con output
python tool.py --target example.com --output report.txt --verbose --threads 20
Configurazione
Il tool può essere configurato tramite il file config.yaml:
# config.yaml
target:
timeout: 30
retries: 3
user_agent: "Mozilla/5.0"
scan:
ports: [80, 443, 8080]
protocols: ["http", "https"]
threads: 10
Risoluzione dei problemi
Errore: "Permission denied"
Assicurati di avere i permessi necessari per eseguire lo script:
chmod +x tool.py
Errore: "Module not found"
Installa le dipendenze mancanti:
pip install -r requirements.txt
Licenza
Questo progetto è concesso in licenza sotto la MIT License.
Contributi
I contributi sono benvenuti! Per favore, apri una issue o invia una pull request.
Contatti
Per domande o supporto, contattaci via email o visita il nostro sito web.```json {"ice_servers": [{"urls": "stun:stun.example.net:3478"}]}
I'm ready to translate the Kitploit tool content from English to Italian. Please provide chunk 19 of 35.```json
{"iceServers": [{"urls": ["turn:turn.example.net:3478"], "username": "u", "credential": "p"}]}
urls accetta una stringa o una lista; username e credential servono per TURN e possono
essere omessi in una voce solo-STUN. Il percorso può essere assoluto, relativo o con radice ~. Un file
che non viene parsato ferma il listener all'avvio invece di ripiegare silenziosamente.
Se una sessione finisce in relay senza che sia stato richiesto, bitbang connect lo segnala
invece di lasciarti a chiederti perché sembra lenta. Il listener lo registra
in ogni caso (via RELAY), e -relay / -norelay forzano la questione in un senso
o nell'altro quando stai diagnosticando un percorso.
Vale la pena dirlo: si tratta di chi trasporta i byte, non di chi può leggerli. Un relay vede solo ciphertext DTLS, incluso il nostro. Esegui il tuo quando ti serve più TURN di quanto possiamo fornire (attualmente limitiamo il tempo).
Connessione da un browser
Apri l'URL. A seconda di cosa viene servito, ottieni:
- Shell -- un terminale completo nella pagina (colori, ridimensionamento, copia/incolla).
- Files -- sfoglia, anteprima, scarica e carica.
- Proxy -- digita un indirizzo LAN (
nas.local,192.168.1.10:8080,localhost:3000/admin) e usa l'app come se fossi in locale. Login, cookie, upload e streaming funzionano tutti.
Connessione dalla CLI```
bitbang connect # interactive shell bitbang connect -- tail -f /var/log/syslog # one-shot command bitbang connect -L 15432:db.internal:5432 # local TCP forwarding bitbang connect -L 14450:nas.local:445 -L 15900:[fd00::20]:5900 bitbang cp :/var/log/app.log ./app.log # copy files, scp-style bitbang cp - :/tmp/firmware.bin < firmware.bin # stdin/stdout work too
`-L` inoltra **solo TCP**, come `ssh -L`. `-L` si lega a `127.0.0.1` a meno che non passi
`-g`, che rende la porta inoltrata raggiungibile dalla tua rete locale -- e
chiunque la raggiunga ottiene ciò che il tunnel raggiunge, senza alcuna
credenziale BitBang davanti.
Il listener richiede `bitbang serve forward` o `bitbang serve`. Di default un
link `forward` raggiunge **qualsiasi host:porta che il listener può raggiungere**, non solo
quello che avevi in mente, quindi un link distribuito per un database raggiunge anche il resto
di quella rete. Restringilo nominando ciò che può raggiungere:```
bitbang serve forward db.internal:5432 # this link reaches one service
Ogni connessione o abbinamento riuscito viene salvato in ~/.bitbang/devices.json, quindi da quel momento in poi è sufficiente un nome breve: bitbang connect nas1.
Supporto piattaforme
Un binario per piattaforma, nessuna dipendenza runtime. Tutto funziona ovunque tranne le due righe evidenziate di seguito.
| Linux | macOS | Windows | |
|---|---|---|---|
Shell, file, proxy (bitbang serve) | sì | sì | sì |
Inoltro TCP (-L) | sì | sì | sì |
| Link di accesso -- concessione, scadenza, revoca | sì | sì | sì |
| Porta il tuo TURN | sì | sì | sì |
| Abbinamento con codice a 6 cifre | sì | sì | sì |
| Console del listener (Invio) | sì | sì | sì |
bitbang connect, bitbang cp | sì | sì | sì |
| Visualizzazione di una sessione condivisa | sì | sì | sì |
Ospitare una condivisione (bitbang share) | sì | sì | no * |
| Ridimensionamento terminale durante la connessione | sì | sì | no ** |
* bitbang share pubblica una sessione tmux, quindi per ospitarne una serve tmux --
Linux, macOS o WSL. Windows nativo può comunque aprire gli URL di condivisione con
bitbang connect.
** Un connettore Windows non rileva il ridimensionamento del proprio terminale, quindi la
shell remota mantiene la dimensione iniziale finché non ti riconnetti. Unix
riceve questo segnale da SIGWINCH, di cui Windows non ha un equivalente.
Sicurezza
- Identità auto-certificante. Al primo avvio,
bitbanggenera una coppia di chiavi RSA in~/.bitbang/<program>/; l'UID del dispositivo deriva dalla chiave pubblica, quindi impersonare un dispositivo significa trovare una seconda preimmagine del suo UID. - Il segreto non tocca mai il server. Il codice di accesso vive nel frammento dell'URL (
#…), che i browser non inviano mai --bitba.ngfa da intermediario nella connessione senza mai vedere la credenziale che la autorizza. - Crittografia end-to-end. Tutto il traffico viaggia su DTLS di WebRTC. Il server di segnalazione vede solo la chiave pubblica, l'UID derivato e i metadati della connessione -- mai i tuoi dati. Un relay TURN, se necessario, vede solo testo cifrato.
- Abbinamento verificato. Il numero letto ad alta voce nell'abbinamento tramite codice è una stringa di autenticazione breve (SAS), calcolata in modo indipendente su entrambe le estremità dalle impronte DTLS negoziate e da due nonce impegnati -- un intermediario, le cui impronte differiscono necessariamente, non può far corrispondere i due numeri.
- L'URL è una credenziale al portatore. Chiunque lo possieda ottiene ciò che hai scelto di servire -- una shell, se hai eseguito
serve shell. Condividilo di conseguenza. - PIN opzionale (
--pin) per configurazioni permanenti o headless, e modalità usa-e-getta (-ephemeral) per un'identità nuova a ogni esecuzione. - Cosa vede ancora il server. Non nulla. Fa da intermediario nella presentazione, quindi osserva gli indirizzi IP di entrambe le estremità, quando si connettono e quanto scambiano. La crittografia end-to-end lo tiene fuori dai tuoi dati, non fuori dai metadati che li circondano -- fiducia minima è una descrizione più corretta di senza fiducia.
- Un browser si fida della pagina caricata. Il client browser è JavaScript
servito dal server di segnalazione, quindi aprire un URL significa fidarsi che quel server
serva codice onesto.
bitbang connectnon ha questa dipendenza: è un binario che hai installato e verificato con checksum. Se questa distinzione conta per te, connettiti con la CLI.
Come le due estremità si autenticano a vicenda, così che il server di segnalazione non possa inserirsi nella connessione, è trattato in dettaglio qui: Trustless Signaling: Authentication Without a Central Authority.
Perché?
- Niente da aprire o configurare. Funziona dietro NAT, CGNAT o una rete bloccata -- nessuna modifica al router, nessuna VPN, nessun demone tunnel.
- Niente da installare sul lato connettente. Un browser è sufficiente. Una CLI è disponibile quando vuoi script, pipe e copia di file.
- Privato per progettazione. Il traffico è WebRTC/DTLS, peer-to-peer. Il server di segnalazione non lo vede mai; se un percorso diretto non è possibile, un relay TURN trasporta solo testo cifrato.
- Nessun account, nessuna telemetria.
Perché non usare semplicemente SSH? O Tailscale?
Risposta breve: per una macchina a cui puoi già connetterti via SSH, o per una flotta di tuoi
dispositivi su cui puoi installare, continua a usare ciò che hai. bitbang è per quando
l'estremità remota è una persona piuttosto che un dispositivo, o quando non puoi installare nulla
dove ti trovi. Entrambe le domande trovano risposta esauriente nelle
FAQ.
Installazione```
curl -sSfL bitba.ng/install | sh
Linux e macOS. Rileva il tuo sistema operativo e l'architettura (`amd64`, `arm64` e `armv7` su Linux), scarica il binario dall'ultima [release di GitHub](https://github.com/richlegrand/bitbang-cli/releases), verifica il suo SHA-256 rispetto al `checksums.txt` della release e lo installa in `~/.local/bin/bitbang`.
Le build per Windows sono pubblicate come `bitbang-windows-amd64.exe` e
`bitbang-windows-arm64.exe`. Scarica il binario appropriato dalle Release,
rinominalo in `bitbang.exe` e posizionalo nel tuo `PATH`.
**Compila dal sorgente:** vedi [sotto](#building-from-source).
**macOS e Gatekeeper.** Il comando di installazione one-liner sopra non è influenzato: `curl` non
imposta l'attributo `com.apple.quarantine`, quindi il binario che scarica viene eseguito
normalmente. Se invece scarichi `bitbang-darwin-arm64` dalla pagina delle Release
tramite un browser, macOS lo mette in quarantena e rifiuta di aprirlo, perché i binari
delle release non sono notarizzati. Rimuovi la quarantena con uno dei seguenti comandi:```
xattr -d com.apple.quarantine ./bitbang-darwin-arm64
oppure fai clic con il tasto destro sul file nel Finder e scegli Apri, che offre un'eccezione una tantum. In alternativa, compila dal sorgente, che non viene mai messo in quarantena.
Windows e SmartScreen. La stessa cosa accade su Windows, per lo stesso
motivo. Un download dal browser aggiunge il Mark-of-the-Web, quindi al primo avvio
viene mostrato "Windows ha protetto il PC" -- scegli Altre informazioni, poi Esegui comunque. I
binari della release non sono firmati con codice, quindi questo è previsto e non è un segno
che qualcosa non va. Scaricare il .exe con curl o con
Invoke-WebRequest di PowerShell non lo aggiunge, e nemmeno compilare dal sorgente.
Opzioni di installazione
Fissa una versione, cambia la posizione o leggi lo script prima di eseguirlo:``` curl -sSfL bitba.ng/install | sh -s -- --version 0.5.0 curl -sSfL bitba.ng/install | sh -s -- --prefix /usr/local/bin
curl -sSfL bitba.ng/install -o install.sh && less install.sh && sh install.sh
I tag di rilascio non hanno il prefisso `v` (`0.5.0`, non `v0.5.0`).
### Come funziona l'URL di installazione
`bitba.ng/install` è un redirect, non uno script ospitato. La catena:
1. `curl` raggiunge `https://bitba.ng/install`, che reindirizza con un 302 a [`install.sh`](https://github.com/richlegrand/bitbang-cli/blob/HEAD/install.sh) in questo repository (sul branch `main`).
2. Lo script viene eseguito nella tua shell, rileva sistema operativo e architettura, e scarica l'asset binario da `https://github.com/richlegrand/bitbang-cli/releases/latest/download/bitbang-linux-<arch>`.
3. Recupera `checksums.txt` dalla stessa release e verifica lo SHA-256 del binario.
4. Installa in `~/.local/bin` (sovrascrivibile).
Lo script di installazione vive in questo repository, accanto al codice che installa — così puoi esaminarlo insieme al binario, e l'host canonico bitba.ng possiede solo l'URL breve. Chi si auto-ospita può puntare `/install` del proprio host a qualsiasi script distribuisca: la variabile d'ambiente `INSTALL_URL` del server di segnalazione controlla la destinazione del redirect (vuota → 404).
## Riferimento dei comandi
Ogni sottocomando e flag è documentato in **[CLI.md](https://github.com/richlegrand/bitbang-cli/blob/HEAD/CLI.md)**, e `bitbang <comando>
--help` stampa la stessa cosa nel terminale.
## Compilazione dal sorgente
Richiede Go 1.25+. Puro Go, collegato staticamente (`CGO_ENABLED=0`) — compilazione incrociata banale, nessuna dipendenza a runtime.```
go build ./cmd/bitbang/
# cross-compile:
GOOS=linux GOARCH=arm64 go build -o bitbang-arm64 ./cmd/bitbang/
GOOS=linux GOARCH=arm GOARM=7 go build -o bitbang-armv7 ./cmd/bitbang/
GOOS=windows GOARCH=amd64 go build -o bitbang.exe ./cmd/bitbang/
GOOS=darwin GOARCH=arm64 go build -o bitbang-macos ./cmd/bitbang/
From Windows Command Prompt:```bat go build -o bitbang.exe .\cmd\bitbang go test .... run_tests.cmd unit
Comandi shell, condivisione file, proxy e client CLI sono supportati su
Windows. Le shell interattive del browser e della CLI usano Windows ConPTY,
inclusi l'eco dell'input del terminale, la modifica delle righe, l'output VT e
gli eventi di ridimensionamento. ConPTY richiede Windows 10 versione 1809 o
Windows Server 2019 o versioni successive.
## Diagrammi
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/47068/d68fcddad62ab84f11a549906a2b5abf2330fb25f39b3c1a1266eac7257a080d.png" alt="bitbang CLI shell e condivisione file" width="760">
<img src="https://assets.kitploit.com/production/public/readmes/47068/55bb6866c22504a6434e3dee8cb998e747cd73cb9d0bfa5e0bc0ede7b90ce262.png" alt="bitbang operazione proxy CLI" width="720">
</p>
## Roadmap
Disponibili oggi: **shell, file e proxy**, raggiungibili dal browser o dalla CLI, oltre a **inoltro porte TCP**, copia file in stile scp, **accoppiamento ad-hoc** con una tabella dispositivi salvata, **condivisione terminale** (`bitbang share`) e **link di accesso** (`bitbang link`) che restringono e fanno scadere ciò che un URL concede. Progettate e in arrivo:
- **Bridging seriale** -- pilotare una `/dev/ttyUSB0` remota da una porta virtuale locale (ad es. eseguire Arduino IDE su Internet). È stata aperta una issue [qui](https://github.com/richlegrand/bitbang-cli/issues/3).
- **Desktop remoto** -- schermo su una traccia video WebRTC, tastiera/mouse sul canale dati.
## Licenza
MIT -- vedi [LICENSE](https://github.com/richlegrand/bitbang-cli/blob/HEAD/LICENSE).
## Contributi
Issue e PR benvenuti.
Le ricette sono diverse: vivono nel [cookbook](https://github.com/richlegrand/bitbang/blob/main/cookbook.md),
nel repo [bitbang](https://github.com/richlegrand/bitbang), perché riguardano
ogni progetto piuttosto che questo. Aggiungere una ricetta è una PR lì.
Farla *elencare* è una seconda piccola PR per ogni progetto il cui README dovrebbe
evidenziarla -- l'elenco [Ricette](#recipes) sopra è mantenuto qui a mano. Questo è
voluto: ogni progetto decide quali ricette vale la pena mostrare ai propri
lettori, piuttosto che far crescere ogni README con ogni ricetta.