Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
gonc — Netcat con NAT traversal automatizado, P2P seguro y funciones avanzadas para acceso a shell, transferencia de archivos y proxy de red. | Kitploit
Herramientas/GitHubGitHub/threatexpert/gonc
Utilidades de Propósito GeneralHerramientas de Cifrado/DescifradoProxies Web e InterceptaciónExfiltración de DatosSeguridad de RedesPruebas de PenetraciónComando y ControlRed TeamingHerramienta de Acceso Remoto
GitHubthreatexpert/gonc

gonc

Netcat con NAT traversal automatizado, P2P seguro y funciones avanzadas para acceso a shell, transferencia de archivos y proxy de red.

695602hace 1 mesRevisado por Kitploit
Ver RepositorioSitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Introducción a gonc

README en 中文 、 English

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.


Descarga de la última versión

docs


Proyectos relacionados

  • — una aplicación de escritorio (Windows) y Android construida sobre : 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.
gonc-gui
gonc

Ejemplos de uso

Uso básico

  • Úsalo como nc:

    root@kitploit:~
    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.

    hole-punching

Túnel P2P y servidor de archivos HTTP

  • 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:

    root@kitploit:~
    gonc -p2p <passphrase> -httpserver c:/RootDir1 c:/RootDir2
    
  • En el lado receptor, hay dos opciones:

  1. 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ó:

    root@kitploit:~
    gonc -p2p <passphrase> -download c:/SavePath
    
  2. 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:

    root@kitploit:~
    gonc -p2p <passphrase> -httplocal-port 9999
    

    Si necesitas descargar un subdirectorio específico, el navegador resulta inconveniente, pero puedes hacerlo así:

    root@kitploit:~
    gonc -http-download c:/SavePath http://127.0.0.1:9999/subdir
    

Comunicación P2P cifrada segura

  • 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.

    root@kitploit:~
    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):

    root@kitploit:~
    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,

    root@kitploit:~
    gonc -p2p passphrase -mqtt-wait
    

    En el otro lado,

    root@kitploit:~
    gonc -p2p passphrase -mqtt-hello
    
  • Verifica tu tipo de NAT

    root@kitploit:~
    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.

Reverse Shell (soporte de pseudo-terminal para sistemas tipo UNIX)

  • Listener (no usa -keep-open, acepta solo una conexión; sin autenticación con -psk):
    root@kitploit:~
    gonc -tls -exec ":sh /bin/bash" -l 1234
    
  • Conéctate para obtener un shell (admite TAB, Ctrl+C, etc.):
    root@kitploit:~
    gonc -tls -pty x.x.x.x 1234
    
  • Usa P2P para reverse shell (passphrase se usa para autenticación, garantizando comunicación segura con TLS 1.3):
    root@kitploit:~
    gonc -exec ":sh /bin/bash" -p2p passphrase
    
    En el otro lado:
    root@kitploit:~
    gonc -pty -p2p passphrase
    

Prueba de velocidad de transmisión

  • Envía datos y mide la velocidad de transmisión (/dev/zero y /dev/urandom integrados):
    root@kitploit:~
    gonc.exe -send /dev/zero -P x.x.x.x 1234
    
    Ejemplo de salida:
    root@kitploit:~
    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:
    root@kitploit:~
    gonc -P -l 1234 > NUL
    

Túnel P2P y proxy SOCKS5 / HTTP

  • Espera a que se establezca el túnel:

    root@kitploit:~
    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:

    root@kitploit:~
    # 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:

    root@kitploit:~
    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

    root@kitploit:~
    # 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"
    
    # Below is the configuration method for the URL format. The parameter value of -link must be enclosed in quotes; otherwise, parsing problems may occur.
    # The left side x://0.0.0.0:1080?tproxy=1 is equivalent to simply writing 1080.
    # The right side enables port 1080 on the remote host, without transparent proxy support.
    gonc -p2p <passphrase> -link "x://0.0.0.0:1080?tproxy=1;x://127.0.0.1:1080"
    
    # The left side f://127.0.0.1:1080?to=1.2.3.4:80
    # means listening locally on port 1080 and forwarding traffic to 1.2.3.4:80 on the remote side.
    # The right side 'none' indicates that no port is opened remotely.
    gonc -p2p <passphrase> -link "f://127.0.0.1:1080?to=1.2.3.4:80;none"
    
    # The right side f://0.0.0.0:80?to=127.0.0.1:80
    # means listening on port 80 on the remote side and forwarding traffic back to 127.0.0.1:80 locally.
    gonc -p2p <passphrase> -link "none;f://0.0.0.0:80?to=127.0.0.1:80"
    
    # The left side x+tls means the proxy protocol with TLS encryption and allows for certificate configuration. The right side specifies the outbound IP address via `outbound_bind` (suitable for multi-IP environments).
    gonc -p2p <口令> -link "x+tls://user:[email protected]:1080?cert=ca.pem&key=key.pem;none?outbound_bind=10.0.0.5"
    

Configuración flexible de servicios

  • Usa -exec para configurar flexiblemente la aplicación que proporcionará servicios para cada conexión. Por ejemplo, en lugar de especificar /bin/bash para comandos de shell, también se puede usar para reenvío de puertos. Sin embargo, el siguiente ejemplo inicia un nuevo proceso gonc para cada conexión:
    root@kitploit:~
    gonc -keep-open -exec "gonc -tls www.baidu.com 443" -l 8000
    
  • Para evitar generar múltiples procesos hijos, usa el módulo nc integrado:
    root@kitploit:~
    gonc -keep-open -exec ":nc -tls www.baidu.com 443" -l 8000
    

Servicio de proxy Socks5

  • Configura el modo cliente:

    root@kitploit:~
    gonc -x s.s.s.s:port x.x.x.x 1234
    
  • Servidor Socks5 integrado: Usa -e :s5s para proporcionar servicio Socks5 estándar. Admite -auth para establecer un nombre de usuario y contraseña para Socks5. Usa -keep-open para aceptar continuamente conexiones de clientes al servidor Socks5. Gracias a las goroutines de Golang, logra un buen rendimiento de concurrencia multi-cliente:

    root@kitploit:~
    gonc -e ":s5s -auth user:passwd" -keep-open -l 1080
    
  • Socks5 seguro sobre TLS: Dado que el Socks5 estándar no está cifrado, usa -e :s5s con -tls y -psk para personalizar la comunicación Socks5 segura sobre TLS. Usa -P para monitorear la información de transmisión de conexiones, y -acl para implementar control de acceso para conexiones entrantes y destinos de proxy. Para el formato del archivo acl.txt, consulta acl-example.txt.

    gonc.exe -tls -psk passphrase -e :s5s -keep-open -acl acl.txt -P -l 1080

    En el otro lado, usa :s5c (comando s5c integrado) para convertir Socks5 sobre TLS a Socks5 estándar, proporcionando acceso de cliente local en 127.0.0.1:3080:

    gonc.exe -e ":s5c -tls -psk passphrase x.x.x.x 1080" -keep-open -l -local 127.0.0.1:3080

Establecer un túnel para otras aplicaciones

  • Asistir a WireGuard en NAT Traversal para formar una VPN

    En el lado pasivo (listening), PC-S, ejecuta el siguiente comando (usando la clave pública del peer de WireGuard como frase de contraseña, y asumiendo que WireGuard está escuchando en el puerto 51820):

    gonc -p2p <PublicKey-of-PS-S> -mqtt-wait -u -k -e ":nc -u 127.0.0.1 51820"

    En el lado activo (iniciador), PC-C, configura el Endpoint del peer de WireGuard (PS-S) a 127.0.0.1:51821, con su propia interfaz WireGuard escuchando en 51820. Luego ejecuta el siguiente comando. El flag -k permite que gonc se reconecte automáticamente si la red se cae:

    gonc -p2p <PublicKey-of-PS-S> -mqtt-hello -u -k -e ":nc -u -local 127.0.0.1:51821 127.0.0.1 51820"

Capacidades de P2P NAT Traversal

¿Cómo establece gonc una conexión P2P?

  • Usa concurrentemente múltiples servidores STUN públicos para detectar mapeos NAT TCP/UDP locales y determinar inteligentemente el tipo de NAT
  • Intercambia información de direcciones de forma segura a través de servidores MQTT públicos, usando un hash derivado del SessionKey como tema compartido
  • Intenta la conexión directa en el siguiente orden de prioridad: IPv6 TCP > IPv4 TCP > IPv4 UDP, buscando una comunicación peer-to-peer real
  • No se usan servidores de retransmisión ni se proporcionan mecanismos de fallback — o la conexión falla, o es un éxito P2P real

Cómo desplegar un servidor de retransmisión para casos en los que P2P no es viable

  • Un servidor SOCKS5 con soporte UDP ASSOCIATE ejecutándose en una IP pública es suficiente como retransmisor. También puedes ejecutar el proxy SOCKS5 integrado de gonc en tu propio VPS para actuar como servidor de retransmisión.

    El siguiente comando inicia un proxy SOCKS5 que solo admite reenvío UDP. Las opciones -psk y -tls habilitan el cifrado y la autenticación basada en PSK. Nota: No abras solo el puerto 1080 en tu firewall — el reenvío UDP usa puertos aleatorios para cada sesión.

    gonc -e ":s5s -u -c=0" -psk <password> -tls -k -l 1080

  • Cuando P2P falla, solo necesitas que un lado de gonc reintente el proceso P2P usando la opción -x para enrutar a través del retransmisor SOCKS5:

    gonc -p2p <passphrase> -x "-psk <password> -tls <socks5server-ip>:1080"

    Alternativamente, puedes usar un servidor proxy SOCKS5 estándar que admita reenvío UDP:

    gonc -p2p <passphrase> -x "<socks5server-ip>:1080" -auth "user:password"

Por ejemplo, si ambos peers están detrás de NATs simétricos y P2P falla, hacer que solo un lado use un retransmisor SOCKS5 UDP cambia efectivamente su comportamiento NAT a "easy", haciendo mucho más fácil establecer una conexión. Los datos permanecen cifrados de extremo a extremo.

Servidores públicos utilizados(STUN & MQTT):

root@kitploit:~
"tcp://turn.cloudflare.com:80",
"udp://turn.cloudflare.com:53",
"udp://stun.l.google.com:19302",
"stun.gonc.cc:3478",
"global.turn.twilio.com:3478",
"stun.nextcloud.com:443",

"tcp://broker.hivemq.com:1883",
"tcp://broker.emqx.io:1883",
"tcp://test.mosquitto.org:1883",
"tcp://mqtt.gonc.cc:1883"

¿Qué tan efectivo es gonc en NAT traversal?

Excepto en escenarios de NAT simétrico en ambos extremos, gonc logra una tasa de éxito muy alta

gonc clasifica los tipos de NAT en tres categorías:

  1. Easy: Un único puerto interno se mapea al mismo puerto externo a través de múltiples servidores STUN

  2. Hard: Un único puerto interno se mapea a un puerto externo consistente pero diferente a través de los servidores STUN — más difícil que el tipo 1

  3. Symmetric: Un único puerto interno se mapea a diferentes puertos externos dependiendo del destino — el tipo más difícil

Para manejar estos tipos de NAT, gonc emplea varias estrategias de traversal:

  • Usa múltiples servidores STUN para detectar el comportamiento NAT e identificar escenarios de múltiples IPs de salida

  • Prefiere conexiones IPv6 cuando ambos lados lo admiten (por ejemplo, marcado directo TCP6-a-TCP6)

  • Ambos peers escuchan en TCP mientras se marcan mutuamente simultáneamente para aumentar el éxito del TCP hole punching

  • El peer con el NAT más fácil retrasa su paquete UDP inicial para evitar desencadenar cambios de puerto en el lado más difícil

  • El peer con el NAT más difícil envía paquetes UDP con un TTL bajo para reducir la interferencia del firewall remoto

  • Como último recurso, usa una estrategia de "paradoja del cumpleaños": el lado más difícil usa 600 puertos de origen aleatorios, y el otro lado prueba 600 puertos de destino aleatorios, aumentando la probabilidad de una colisión exitosa de puertos UDP

Descargar herramienta