Netcat con NAT traversal automatizado, P2P seguro y funciones avanzadas para acceso a shell, transferencia de archivos y proxy de red.
gonc es una herramienta netcat basada en Golang diseñada para facilitar la comunicación peer-to-peer. Sus características principales incluyen:
🔁 NAT Traversal automatizado: Configuración cero. Ambas partes solo necesitan acordar una frase de contraseña. Al usar el parámetro -p2p, los peers pueden descubrir automáticamente las direcciones de red del otro y establecer una conexión punto a punto mediante NAT traversal, aprovechando servicios públicos de STUN y MQTT para el intercambio de direcciones.
🔒 Cifrado de extremo a extremo con autenticación mutua: Admite TLS para TCP y DTLS para transmisión cifrada UDP, con autenticación mutua de identidad basada en frase de contraseña.
🧩 Configuración flexible de servicios: Con el parámetro -e, puedes configurar flexiblemente la aplicación para servir cada conexión. Por ejemplo, -e /bin/sh puede proporcionar un shell cmd remoto. También puedes usar comandos virtuales integrados para un servicio SOCKS5 conveniente, servicio de archivos HTTP y reenvío de tráfico.
gonc: conexión directa P2P entre dispositivos y redes, y transferencia segura de archivos. Solo comparte una frase de contraseña (o escanea un código QR); no se requiere línea de comandos.Úsalo como nc:
gonc www.baidu.com 80
gonc -tls www.baidu.com 443
solo puede establecer conexiones punto a punto basadas en IP y puerto.
Ahora, también puedes establecer conexiones punto a punto basadas en una frase de contraseña compartida, con NAT traversal automatizado.
El siguiente diagrama muestra el proceso de gonc estableciendo una conexión P2P entre una red de banda ancha doméstica (hard NAT) y un peer en una red móvil (symmetric NAT). Como ambas partes tienen IPv6, se usa la opción -4 en ambos extremos para forzar IPv4 con el fin de demostrar NAT traversal.

Ambas partes acuerdan la misma frase de contraseña. En el lado emisor, inicia un servidor de archivos HTTP para exponer los archivos o directorios a compartir. La opción -httpserver acepta múltiples rutas, cada una de las cuales puede ser un archivo individual o un directorio:
gonc -p2p <passphrase> -httpserver c:/RootDir1 c:/RootDir2
En el lado receptor, hay dos opciones:
Descargar automáticamente todo el directorio
Después de ejecutar el siguiente comando, todos los archivos se descargarán recursivamente a la máquina local. Si el proceso se interrumpe, volver a ejecutar el comando reanudará automáticamente desde donde se quedó:
gonc -p2p <passphrase> -download c:/SavePath
Navegar y descargar selectivamente a través del navegador
Esta opción no inicia la descarga automáticamente. En su lugar, debes abrir manualmente un navegador y visitar http://127.0.0.1:9999 para ver la lista de archivos del peer y descargar archivos según sea necesario:
gonc -p2p <passphrase> -httplocal-port 9999
Si necesitas descargar un subdirectorio específico, el navegador resulta inconveniente, pero puedes hacerlo así:
gonc -http-download c:/SavePath http://127.0.0.1:9999/subdir
Establece comunicación P2P cifrada segura entre dos redes diferentes acordando una frase de contraseña (usa gonc -psk . para generar una frase de contraseña de alta entropía que reemplace passphrase). Esta frase de contraseña se usa para el descubrimiento mutuo y la derivación de certificados, garantizando la seguridad de la comunicación con TLS 1.3.
gonc -p2p passphrase
En el otro lado, usa los mismos parámetros (el programa intentará automáticamente comunicación TCP o UDP (preferiblemente TCP), negociará roles (cliente/servidor TLS) y completará el protocolo TLS):
gonc -p2p passphrase
Ten en cuenta que si el otro extremo retrasa el tiempo de ejecución, saldrá si no puede encontrar al otro extremo con quien intercambiar información en aproximadamente medio minuto. Por lo tanto, también admite un mecanismo de espera basado en suscripción a mensajes MQTT, usando -mqtt-wait y -mqtt-hello para sincronizar el momento en que ambas partes inician P2P. Por ejemplo, a continuación se usa -mqtt-wait para esperar continuamente,
gonc -p2p passphrase -mqtt-wait
En el otro lado,
gonc -p2p passphrase -mqtt-hello
Verifica tu tipo de NAT
gonc -nat-checker
Esto verificará tus direcciones NAT IPv6 e IPv4 TCP y UDP y analizará los cambios de puerto después del NAT. Si no se listan direcciones TCP6 o UDP6, significa que no tienes IPv6. Cada dirección de protocolo termina con "(easy)", lo que indica la mayor tasa de éxito para hole punching; "(hard)" indica una tasa de éxito mayor; y "(symm)" es la más difícil. Symm requiere que el otro extremo sea "easy" o "hard" para que P2P funcione.
-keep-open, acepta solo una conexión; sin autenticación con -psk):
gonc -tls -exec ":sh /bin/bash" -l 1234
gonc -tls -pty x.x.x.x 1234
passphrase se usa para autenticación, garantizando comunicación segura con TLS 1.3):
gonc -exec ":sh /bin/bash" -p2p passphrase
En el otro lado:
gonc -pty -p2p passphrase
/dev/zero y /dev/urandom integrados):
gonc.exe -send /dev/zero -P x.x.x.x 1234
Ejemplo de salida:
IN: 76.8 MiB (80543744 bytes), 3.3 MiB/s | OUT: 0.0 B (0 bytes), 0.0 B/s | 00:00:23
En el lado receptor:
gonc -P -l 1234 > NUL
Espera a que se establezca el túnel:
gonc -p2p passphrase -linkagent
En el otro lado, inicia un servicio proxy SOCKS5 / HTTP local en el puerto 3080 para acceder a la red 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"
A continuación, por ejemplo, si quieres conectarte a 10.0.0.1:3389 en la red remota, simplemente puedes introducir la siguiente dirección en tu cliente de Escritorio Remoto local:
10.0.0.1-3389.gonc.cc:3080
Este dominio se resolverá a una IP con la forma 127.b.c.d. Como resultado, el cliente de Escritorio Remoto se conectará al proxy SOCKS5 local en el puerto 3080, y luego gonc analizará inversamente la dirección 127.b.c.d para extraer la información 10.0.0.1-3389 del nombre de dominio.
Formato de configuración de 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"