Netcat mit automatisierter NAT-Traversierung, sicherem P2P und erweiterten Funktionen für Shell-Zugriff, Dateiübertragung und Netzwerk-Proxying.
gonc ist ein auf Golang basierendes netcat-Tool, das die Peer-to-Peer-Kommunikation erleichtern soll. Seine Hauptmerkmale sind:
🔁 Automatisiertes NAT-Traversal: Keine Konfiguration erforderlich. Beide Seiten müssen sich nur auf eine Passphrase einigen. Durch die Verwendung des Parameters -p2p können Peers automatisch die Netzwerkadressen des jeweils anderen entdecken und eine Punkt-zu-Punkt-Verbindung durch NAT-Traversal aufbauen, wobei öffentliche STUN- und MQTT-Dienste für den Adressaustausch genutzt werden.
🔒 Ende-zu-Ende-Verschlüsselung mit gegenseitiger Authentifizierung: Unterstützt TLS für TCP und DTLS für UDP-verschlüsselte Übertragung, mit passphrasenbasierter gegenseitiger Identitätsauthentifizierung.
🧩 Flexible Dienstkonfiguration: Mit dem Parameter -e können Sie die Anwendung flexibel so konfigurieren, dass sie jede Verbindung bedient. Zum Beispiel kann -e /bin/sh eine entfernte cmd-Shell bereitstellen. Sie können auch integrierte virtuelle Befehle für einen praktischen SOCKS5-Dienst, HTTP-Dateidienst und Traffic-Weiterleitung verwenden.
gonc aufbaut: bequeme geräteübergreifende, netzwerkübergreifende P2P-Direktverbindung und sichere Dateiübertragung. Teilen Sie einfach eine Passphrase (oder scannen Sie einen QR-Code); keine Kommandozeile erforderlich.Verwenden Sie es wie nc:
gonc www.baidu.com 80
gonc -tls www.baidu.com 443
kann nur Punkt-zu-Punkt-Verbindungen basierend auf IP und Port herstellen.
Jetzt können Sie auch Punkt-zu-Punkt-Verbindungen basierend auf einer gemeinsamen Passphrase mit automatisiertem NAT-Traversal herstellen.
Das folgende Diagramm zeigt den Prozess, wie gonc eine P2P-Verbindung zwischen einem Heimbreitbandnetzwerk (Hard NAT) und einem Peer in einem Mobilfunknetzwerk (Symmetric NAT) herstellt. Da beide Seiten IPv6 haben, wird auf beiden Seiten die Option -4 verwendet, um IPv4 zu erzwingen und so das NAT-Traversal zu demonstrieren.

Beide Seiten einigen sich auf dieselbe Passphrase. Auf der Senderseite starten Sie einen HTTP-Dateiserver, um die freizugebenden Dateien oder Verzeichnisse bereitzustellen. Die Option -httpserver akzeptiert mehrere Pfade, wobei jeder entweder eine einzelne Datei oder ein Verzeichnis sein kann:
gonc -p2p <passphrase> -httpserver c:/RootDir1 c:/RootDir2
Auf der Empfängerseite gibt es zwei Optionen:
Das gesamte Verzeichnis automatisch herunterladen
Nach Ausführung des folgenden Befehls werden alle Dateien rekursiv auf den lokalen Rechner heruntergeladen. Wenn der Vorgang unterbrochen wird, wird er beim erneuten Ausführen des Befehls automatisch an der Stelle fortgesetzt, an der er aufgehört hat:
gonc -p2p <passphrase> -download c:/SavePath
Über den Browser durchsuchen und selektiv herunterladen
Diese Option startet den Download nicht automatisch. Stattdessen müssen Sie manuell einen Browser öffnen und http://127.0.0.1:9999 aufrufen, um die Dateiliste des Peers anzuzeigen und Dateien nach Bedarf herunterzuladen:
gonc -p2p <passphrase> -httplocal-port 9999
Wenn Sie ein bestimmtes Unterverzeichnis herunterladen müssen, wird der Browser unpraktisch, aber Sie können es so machen:
gonc -http-download c:/SavePath http://127.0.0.1:9999/subdir
Stellen Sie eine sichere verschlüsselte P2P-Kommunikation zwischen zwei verschiedenen Netzwerken her, indem Sie sich auf eine Passphrase einigen (verwenden Sie gonc -psk ., um eine Passphrase mit hoher Entropie zu generieren, die passphrase ersetzt). Diese Passphrase wird für die gegenseitige Entdeckung und Zertifikatsableitung verwendet und gewährleistet die Kommunikationssicherheit mit TLS 1.3.
gonc -p2p passphrase
Verwenden Sie auf der anderen Seite dieselben Parameter (das Programm versucht automatisch eine TCP- oder UDP-Kommunikation (TCP bevorzugt), handelt Rollen aus (TLS-Client/Server) und schließt das TLS-Protokoll ab):
gonc -p2p passphrase
Beachten Sie, dass das andere Ende, wenn es mit dem Ausführen zögert, beendet wird, wenn es innerhalb von etwa einer halben Minute kein anderes Ende zum Informationsaustausch finden kann. Daher wird auch ein Wartemechanismus basierend auf MQTT-Nachrichtenabonnement unterstützt, wobei -mqtt-wait und -mqtt-hello verwendet werden, um den Zeitpunkt des P2P-Starts beider Parteien zu synchronisieren. Zum Beispiel wartet das Folgende kontinuierlich mit -mqtt-wait,
gonc -p2p passphrase -mqtt-wait
Auf der anderen Seite,
gonc -p2p passphrase -mqtt-hello
Überprüfen Sie Ihren NAT-Typ
gonc -nat-checker
Dies überprüft Ihre IPv6- und IPv4-TCP- und UDP-NAT-Adressen und analysiert Portänderungen nach NAT. Wenn keine TCP6- oder UDP6-Adressen aufgeführt sind, bedeutet dies, dass Sie kein IPv6 haben. Jede Protokolladresse endet mit "(easy)", was die höchste Erfolgsrate für Hole Punching anzeigt; "(hard)" zeigt eine höhere Erfolgsrate an; und "(symm)" ist am schwierigsten. Symm erfordert, dass das andere Ende entweder "easy" oder "hard" ist, damit P2P funktioniert.
-keep-open, akzeptiert nur eine Verbindung; keine Authentifizierung mit -psk):
gonc -tls -exec ":sh /bin/bash" -l 1234
gonc -tls -pty x.x.x.x 1234
passphrase wird zur Authentifizierung verwendet und gewährleistet sichere Kommunikation mit TLS 1.3):
gonc -exec ":sh /bin/bash" -p2p passphrase
Auf der anderen Seite:
gonc -pty -p2p passphrase
/dev/zero und /dev/urandom):
gonc.exe -send /dev/zero -P x.x.x.x 1234
Beispielausgabe:
IN: 76.8 MiB (80543744 bytes), 3.3 MiB/s | OUT: 0.0 B (0 bytes), 0.0 B/s | 00:00:23
Auf der Empfängerseite:
gonc -P -l 1234 > NUL
Warten Sie, bis der Tunnel aufgebaut ist:
gonc -p2p passphrase -linkagent
Starten Sie auf der anderen Seite einen lokalen SOCKS5-/HTTP-Proxy-Dienst auf Port 3080, um auf das entfernte Netzwerk zuzugreifen:
# 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"
Wenn Sie als Nächstes beispielsweise eine Verbindung zu 10.0.0.1:3389 im entfernten Netzwerk herstellen möchten, geben Sie einfach die folgende Adresse in Ihren lokalen Remote-Desktop-Client ein:
10.0.0.1-3389.gonc.cc:3080