Netcat con NAT traversal automatizzato, P2P sicuro e funzionalità avanzate per accesso alla shell, trasferimento file e proxy di rete.
gonc è uno strumento netcat basato su Golang progettato per facilitare la comunicazione peer-to-peer. Le sue caratteristiche principali includono:
🔁 NAT Traversal automatizzato: Configurazione zero. Entrambe le parti devono solo concordare una passphrase. Utilizzando il parametro -p2p, i peer possono scoprire automaticamente gli indirizzi di rete reciproci e stabilire una connessione punto-punto attraverso il NAT traversal, sfruttando servizi pubblici STUN e MQTT per lo scambio degli indirizzi.
🔒 Crittografia end-to-end con autenticazione reciproca: Supporta TLS per TCP e DTLS per UDP per la trasmissione cifrata, con autenticazione reciproca dell'identità basata su passphrase.
🧩 Configurazione flessibile del servizio: Con il parametro -e, puoi configurare in modo flessibile l'applicazione per servire ogni connessione. Ad esempio, -e /bin/sh può fornire una shell cmd remota. Puoi anche utilizzare comandi virtuali integrati per un comodo servizio SOCKS5, servizio file HTTP e inoltro del traffico.
gonc: comoda connessione diretta P2P tra dispositivi e reti diverse e trasferimento sicuro di file. Basta condividere una passphrase (o scansionare un codice QR); nessuna riga di comando necessaria.Usalo come nc:
gonc www.baidu.com 80
gonc -tls www.baidu.com 443
può stabilire solo connessioni punto-punto basate su IP e porta.
Ora puoi anche stabilire connessioni punto-punto basate su una passphrase condivisa, con NAT traversal automatizzato.
Il diagramma seguente mostra il processo con cui gonc stabilisce una connessione P2P tra una rete a banda larga domestica (hard NAT) e un peer su una rete mobile (symmetric NAT). Poiché entrambe le parti hanno IPv6, l'opzione -4 viene utilizzata su entrambe le estremità per forzare IPv4 al fine di dimostrare il NAT traversal.

Entrambe le parti concordano la stessa passphrase. Sul lato mittente, avvia un server file HTTP per esporre i file o le directory da condividere. L'opzione -httpserver accetta più percorsi, ognuno dei quali può essere un singolo file o una directory:
gonc -p2p <passphrase> -httpserver c:/RootDir1 c:/RootDir2
Sul lato ricevente, ci sono due opzioni:
Scaricare automaticamente l'intera directory
Dopo aver eseguito il seguente comando, tutti i file verranno scaricati ricorsivamente sulla macchina locale. Se il processo viene interrotto, rieseguire il comando riprenderà automaticamente da dove era stato interrotto:
gonc -p2p <passphrase> -download c:/SavePath
Sfogliare e scaricare selettivamente tramite browser
Questa opzione non avvia automaticamente il download. Devi invece aprire manualmente un browser e visitare http://127.0.0.1:9999 per visualizzare l'elenco dei file del peer e scaricare i file secondo necessità:
gonc -p2p <passphrase> -httplocal-port 9999
Se devi scaricare una sottodirectory specifica, il browser diventa scomodo, ma puoi fare così:
gonc -http-download c:/SavePath http://127.0.0.1:9999/subdir
Stabilisci una comunicazione P2P cifrata sicura tra due reti diverse concordando una passphrase (usa gonc -psk . per generare una passphrase ad alta entropia da sostituire a passphrase). Questa passphrase viene utilizzata per la scoperta reciproca e la derivazione dei certificati, garantendo la sicurezza delle comunicazioni con TLS 1.3.
gonc -p2p passphrase
Sull'altro lato, usa gli stessi parametri (il programma tenterà automaticamente la comunicazione TCP o UDP (preferendo TCP), negozierà i ruoli (client/server TLS) e completerà il protocollo TLS):
gonc -p2p passphrase
Nota che se l'altra estremità ritarda l'esecuzione, uscirà se non riesce a trovare l'altra estremità con cui interagire entro circa mezzo minuto. Pertanto, supporta anche un meccanismo di attesa basato sulla sottoscrizione di messaggi MQTT, utilizzando -mqtt-wait e -mqtt-hello per sincronizzare il momento in cui le due parti avviano il P2P. Ad esempio, il seguente utilizza -mqtt-wait per attendere continuamente,
gonc -p2p passphrase -mqtt-wait
Sull'altro lato,
gonc -p2p passphrase -mqtt-hello
Controlla il tuo tipo di NAT
gonc -nat-checker
Questo controllerà i tuoi indirizzi NAT IPv6 e IPv4 TCP e UDP e analizzerà i cambiamenti di porta dopo il NAT. Se non vengono elencati indirizzi TCP6 o UDP6, significa che non hai IPv6. Ogni indirizzo di protocollo termina con "(easy)", che indica la massima percentuale di successo per l'hole punching; "(hard)" indica una percentuale di successo più alta; e "(symm)" è il più difficile. Symm richiede che l'altra estremità sia "easy" o "hard" affinché il P2P funzioni.
-keep-open, accetta solo una connessione; nessuna autenticazione con -psk):
gonc -tls -exec ":sh /bin/bash" -l 1234
gonc -tls -pty x.x.x.x 1234
passphrase viene utilizzata per l'autenticazione, garantendo comunicazioni sicure con TLS 1.3):
gonc -exec ":sh /bin/bash" -p2p passphrase
Sull'altro lato:
gonc -pty -p2p passphrase
/dev/zero e /dev/urandom integrati):
gonc.exe -send /dev/zero -P x.x.x.x 1234
Output di esempio:
IN: 76.8 MiB (80543744 bytes), 3.3 MiB/s | OUT: 0.0 B (0 bytes), 0.0 B/s | 00:00:23
Sul lato ricevente:
gonc -P -l 1234 > NUL
Attendi che il tunnel venga stabilito:
gonc -p2p passphrase -linkagent
Sull'altro lato, avvia un servizio proxy locale SOCKS5 / HTTP sulla porta 3080 per accedere alla rete remota:
# The link option controls how the local and remote proxy endpoints are created.
# Use none to indicate that no listening port is opened on that side:
gonc -p2p passphrase -link "3080;none"
Successivamente, ad esempio, se vuoi connetterti a 10.0.0.1:3389 nella rete remota, puoi semplicemente inserire il seguente indirizzo nel tuo client Desktop Remoto locale:
10.0.0.1-3389.gonc.cc:3080
Questo dominio verrà risolto in un IP nella forma 127.b.c.d. Di conseguenza, il client Desktop Remoto si connetterà al proxy SOCKS5 locale sulla porta 3080, e poi gonc ri-analizzerà l'indirizzo 127.b.c.d per estrarre l'informazione 10.0.0.1-3389 dal nome di dominio.
Formato di configurazione di link
# Based on the established tunnel, both local and remote sides listen on port 1080.
# The proxy supports both HTTP and SOCKS5 protocols, with transparent proxy capability enabled.
gonc -p2p <passphrase> -link "1080;1080"