
स्वचालित NAT ट्रैवर्सल, सुरक्षित P2P, और शेल एक्सेस, फ़ाइल ट्रांसफ़र, और नेटवर्क प्रॉक्सीिंग के लिए उन्नत सुविधाओं के साथ Netcat।
gonc एक Golang-आधारित netcat टूल है जिसे पीयर-टू-पीयर संचार को सुविधाजनक बनाने के लिए डिज़ाइन किया गया है। इसकी मुख्य विशेषताएँ हैं:
🔁 स्वचालित NAT ट्रैवर्सल: शून्य कॉन्फ़िगरेशन। दोनों पक्षों को केवल एक पासफ़्रेज़ पर सहमत होने की आवश्यकता है। -p2p पैरामीटर का उपयोग करके, पीयर स्वचालित रूप से एक-दूसरे के नेटवर्क पते खोज सकते हैं और NAT ट्रैवर्सल के माध्यम से पॉइंट-टू-पॉइंट कनेक्शन स्थापित कर सकते हैं, जो पते के आदान-प्रदान के लिए सार्वजनिक STUN और MQTT सेवाओं का लाभ उठाता है।
🔒 म्यूचुअल ऑथेंटिकेशन के साथ एंड-टू-एंड एन्क्रिप्टेड: TCP के लिए TLS और UDP एन्क्रिप्टेड ट्रांसमिशन के लिए DTLS का समर्थन करता है, साथ ही पासफ़्रेज़-आधारित म्यूचुअल पहचान प्रमाणीकरण।
🧩 लचीला सेवा कॉन्फ़िगरेशन: -e पैरामीटर के साथ, आप प्रत्येक कनेक्शन की सेवा के लिए एप्लिकेशन को लचीले ढंग से सेट कर सकते हैं। उदाहरण के लिए, -e /bin/sh एक रिमोट cmd शेल प्रदान कर सकता है। आप सुविधाजनक SOCKS5 सेवा, HTTP फ़ाइल सेवा, और ट्रैफ़िक फ़ॉरवर्डिंग के लिए अंतर्निहित वर्चुअल कमांड का भी उपयोग कर सकते हैं।
goncइसे nc की तरह उपयोग करें:
gonc www.baidu.com 80
gonc -tls www.baidu.com 443
केवल IP और पोर्ट के आधार पर पॉइंट-टू-पॉइंट कनेक्शन स्थापित कर सकता है।
अब, आप साझा पासफ़्रेज़ के आधार पर, स्वचालित NAT ट्रैवर्सल के साथ पॉइंट-टू-पॉइंट कनेक्शन भी स्थापित कर सकते हैं।
निम्नलिखित आरेख एक होम ब्रॉडबैंड नेटवर्क (हार्ड NAT) और मोबाइल नेटवर्क (सिमेट्रिक NAT) पर एक पीयर के बीच gonc द्वारा P2P कनेक्शन स्थापित करने की प्रक्रिया दिखाता है। चूँकि दोनों पक्षों के पास IPv6 है, NAT ट्रैवर्सल प्रदर्शित करने के लिए दोनों सिरों पर IPv4 को बाध्य करने के लिए -4 विकल्प का उपयोग किया गया है।

दोनों पक्ष एक ही पासफ़्रेज़ पर सहमत होते हैं। प्रेषक पक्ष पर, साझा की जाने वाली फ़ाइलों या निर्देशिकाओं को उजागर करने के लिए एक HTTP फ़ाइल सर्वर शुरू करें। -httpserver विकल्प कई पथ स्वीकार करता है, जिनमें से प्रत्येक या तो एक एकल फ़ाइल या एक निर्देशिका हो सकती है:
gonc -p2p <passphrase> -httpserver c:/RootDir1 c:/RootDir2
प्राप्तकर्ता पक्ष पर, दो विकल्प हैं:
पूरी निर्देशिका स्वचालित रूप से डाउनलोड करें
निम्नलिखित कमांड चलाने के बाद, सभी फ़ाइलें पुनरावर्ती रूप से स्थानीय मशीन पर डाउनलोड हो जाएँगी। यदि प्रक्रिया बाधित होती है, तो कमांड को फिर से चलाने पर स्वचालित रूप से वहीं से फिर से शुरू हो जाएगा जहाँ से यह रुका था:
gonc -p2p <passphrase> -download c:/SavePath
ब्राउज़र के माध्यम से ब्राउज़ करें और चुनिंदा रूप से डाउनलोड करें
यह विकल्प स्वचालित रूप से डाउनलोड शुरू नहीं करता है। इसके बजाय, आपको मैन्युअल रूप से एक ब्राउज़र खोलना होगा और पीयर की फ़ाइल सूची देखने और आवश्यकतानुसार फ़ाइलें डाउनलोड करने के लिए http://127.0.0.1:9999 पर जाना होगा:
gonc -p2p <passphrase> -httplocal-port 9999
यदि आपको एक विशिष्ट उपनिर्देशिका डाउनलोड करने की आवश्यकता है, तो ब्राउज़र असुविधाजनक हो जाता है, लेकिन आप इसे इस तरह कर सकते हैं:
gonc -http-download c:/SavePath http://127.0.0.1:9999/subdir
एक पासफ़्रेज़ पर सहमत होकर दो अलग-अलग नेटवर्क के बीच सुरक्षित एन्क्रिप्टेड P2P संचार स्थापित करें (passphrase को बदलने के लिए उच्च-एन्ट्रॉपी पासफ़्रेज़ उत्पन्न करने के लिए gonc -psk . का उपयोग करें)। यह पासफ़्रेज़ म्यूचुअल डिस्कवरी और प्रमाणपत्र व्युत्पत्ति के लिए उपयोग किया जाता है, जो TLS 1.3 के साथ संचार सुरक्षा सुनिश्चित करता है।
gonc -p2p passphrase
दूसरी ओर, समान पैरामीटर का उपयोग करें (प्रोग्राम स्वचालित रूप से TCP या UDP संचार का प्रयास करेगा (TCP को प्राथमिकता), भूमिकाओं पर बातचीत करेगा (TLS क्लाइंट/सर्वर), और TLS प्रोटोकॉल पूरा करेगा):
gonc -p2p passphrase
ध्यान दें कि यदि दूसरा सिरा चलने के समय में देरी करता है, तो यह लगभग आधे मिनट के भीतर जानकारी के साथ बातचीत करने के लिए दूसरा सिरा नहीं ढूँढ पाने पर बाहर निकल जाएगा। इसलिए, यह MQTT संदेश सदस्यता पर आधारित प्रतीक्षा तंत्र का भी समर्थन करता है, जो P2P शुरू करने के लिए दोनों पक्षों के समय को सिंक्रनाइज़ करने के लिए -mqtt-wait और -mqtt-hello का उपयोग करता है। उदाहरण के लिए, निम्नलिखित -mqtt-wait का उपयोग करके लगातार प्रतीक्षा करता है,
gonc -p2p passphrase -mqtt-wait
दूसरी ओर,
gonc -p2p passphrase -mqtt-hello
अपने NAT प्रकार की जाँच करें
gonc -nat-checker
यह आपके IPv6 और IPv4 TCP और UDP NAT पतों की जाँच करेगा और NAT के बाद पोर्ट परिवर्तनों का विश्लेषण करेगा। यदि कोई TCP6 या UDP6 पता सूचीबद्ध नहीं है, तो इसका मतलब है कि आपके पास IPv6 नहीं है। प्रत्येक प्रोटोकॉल पता "(easy)" के साथ समाप्त होता है, जो होल पंचिंग के लिए उच्चतम सफलता दर को इंगित करता है; "(hard)" उच्च सफलता दर को इंगित करता है; और "(symm)" सबसे कठिन है। Symm के लिए P2P काम करने के लिए दूसरे सिरे को "easy" या "hard" होना आवश्यक है।
-keep-open का उपयोग नहीं करता, केवल एक कनेक्शन स्वीकार करता है; -psk के साथ कोई प्रमाणीकरण नहीं):
gonc -tls -exec ":sh /bin/bash" -l 1234
gonc -tls -pty x.x.x.x 1234
passphrase प्रमाणीकरण के लिए उपयोग किया जाता है, TLS 1.3 के साथ सुरक्षित संचार सुनिश्चित करता है):
gonc -exec ":sh /bin/bash" -p2p passphrase
gonc -pty -p2p passphrase
/dev/zero और /dev/urandom):
gonc.exe -send /dev/zero -P x.x.x.x 1234
IN: 76.8 MiB (80543744 bytes), 3.3 MiB/s | OUT: 0.0 B (0 bytes), 0.0 B/s | 00:00:23
gonc -P -l 1234 > NUL
टनल स्थापित होने की प्रतीक्षा करें:
gonc -p2p passphrase -linkagent
दूसरी ओर, रिमोट नेटवर्क तक पहुँचने के लिए पोर्ट 3080 पर एक स्थानीय SOCKS5 / HTTP प्रॉक्सी सेवा शुरू करें:
# 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"
अगला, उदाहरण के लिए, यदि आप रिमोट नेटवर्क में 10.0.0.1:3389 से कनेक्ट करना चाहते हैं, तो आप बस अपने स्थानीय Remote Desktop क्लाइंट में निम्नलिखित पता दर्ज कर सकते हैं:
10.0.0.1-3389.gonc.cc:3080
यह डोमेन 127.b.c.d के रूप में एक IP में हल हो जाएगा। परिणामस्वरूप, Remote Desktop क्लाइंट पोर्ट 3080 पर स्थानीय SOCKS5 प्रॉक्सी से कनेक्ट होगा, और फिर gonc डोमेन नाम से 10.0.0.1-3389 जानकारी निकालने के लिए 127.b.c.d पते को रिवर्स-पार्स करेगा।
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"
# 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"
-exec का उपयोग करें। उदाहरण के लिए, शेल कमांड के लिए /bin/bash निर्दिष्ट करने के बजाय, इसका उपयोग पोर्ट फ़ॉरवर्डिंग के लिए भी किया जा सकता है। हालाँकि, निम्नलिखित उदाहरण प्रत्येक कनेक्शन के लिए एक नई gonc प्रक्रिया शुरू करता है:
gonc -keep-open -exec "gonc -tls www.baidu.com 443" -l 8000
gonc -keep-open -exec ":nc -tls www.baidu.com 443" -l 8000
क्लाइंट मोड कॉन्फ़िगर करें:
gonc -x s.s.s.s:port x.x.x.x 1234
अंतर्निहित Socks5 सर्वर: मानक Socks5 सेवा प्रदान करने के लिए -e :s5s का उपयोग करें। Socks5 के लिए उपयोगकर्ता नाम और पासवर्ड सेट करने के लिए -auth का समर्थन करें। Socks5 सर्वर पर क्लाइंट कनेक्शन को लगातार स्वीकार करने के लिए -keep-open का उपयोग करें। Golang के goroutines के लिए धन्यवाद, यह अच्छा मल्टी-क्लाइंट समवर्ती प्रदर्शन प्राप्त करता है:
gonc -e ":s5s -auth user:passwd" -keep-open -l 1080
TLS पर सुरक्षित Socks5: चूँकि मानक Socks5 अनएन्क्रिप्टेड है, TLS संचार पर सुरक्षित Socks5 को अनुकूलित करने के लिए -e :s5s को -tls और -psk के साथ उपयोग करें। कनेक्शन ट्रांसमिशन जानकारी की निगरानी के लिए -P का उपयोग करें, और आने वाले कनेक्शन और प्रॉक्सी गंतव्यों के लिए एक्सेस नियंत्रण लागू करने के लिए -acl का उपयोग करें। acl.txt फ़ाइल प्रारूप के लिए, acl-example.txt देखें।
gonc.exe -tls -psk passphrase -e :s5s -keep-open -acl acl.txt -P -l 1080
दूसरी ओर, TLS पर Socks5 को मानक Socks5 में बदलने के लिए :s5c (अंतर्निहित s5c कमांड) का उपयोग करें, जो 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
VPN बनाने के लिए WireGuard को NAT ट्रैवर्सल में सहायता करें
निष्क्रिय (श्रवण) पक्ष, PC-S पर, निम्नलिखित कमांड चलाएँ (पासफ़्रेज़ के रूप में WireGuard पीयर की सार्वजनिक कुंजी का उपयोग करते हुए, और मान लें कि WireGuard पोर्ट 51820 पर सुन रहा है):
gonc -p2p <PublicKey-of-PS-S> -mqtt-wait -u -k -e ":nc -u 127.0.0.1 51820"
सक्रिय (आरंभ करने वाले) पक्ष, PC-C पर, WireGuard पीयर (PS-S) के Endpoint को 127.0.0.1:51821 पर सेट करें, और इसका अपना WireGuard इंटरफ़ेस 51820 पर सुन रहा हो। फिर निम्नलिखित कमांड चलाएँ। -k फ़्लैग gonc को नेटवर्क गिरने पर स्वचालित रूप से पुनः कनेक्ट करने की अनुमति देता है:
gonc -p2p <PublicKey-of-PS-S> -mqtt-hello -u -k -e ":nc -u -local 127.0.0.1:51821 127.0.0.1 51820"
सार्वजनिक IP पर चलने वाला UDP ASSOCIATE समर्थन वाला एक SOCKS5 सर्वर रिले के रूप में पर्याप्त है। आप रिले सर्वर के रूप में कार्य करने के लिए अपने स्वयं के VPS पर gonc का अंतर्निहित SOCKS5 प्रॉक्सी भी चला सकते हैं।
निम्नलिखित कमांड एक SOCKS5 प्रॉक्सी शुरू करता है जो केवल UDP फ़ॉरवर्डिंग का समर्थन करता है। -psk और -tls विकल्प एन्क्रिप्शन और PSK-आधारित प्रमाणीकरण सक्षम करते हैं। ध्यान दें: अपने फ़ायरवॉल में केवल पोर्ट 1080 न खोलें—UDP फ़ॉरवर्डिंग प्रत्येक सत्र के लिए यादृच्छिक पोर्ट का उपयोग करती है।
gonc -e ":s5s -u -c=0" -psk <password> -tls -k -l 1080
जब P2P विफल हो जाता है, तो आपको SOCKS5 रिले के माध्यम से रूट करने के लिए -x विकल्प का उपयोग करके gonc के केवल एक पक्ष को P2P प्रक्रिया का पुनः प्रयास करने की आवश्यकता होती है:
gonc -p2p <passphrase> -x "-psk <password> -tls <socks5server-ip>:1080"
वैकल्पिक रूप से, आप UDP फ़ॉरवर्डिंग का समर्थन करने वाले मानक SOCKS5 प्रॉक्सी सर्वर का उपयोग कर सकते हैं:
gonc -p2p <passphrase> -x "<socks5server-ip>:1080" -auth "user:password"
उदाहरण के लिए, यदि दोनों पीयर सिमेट्रिक NAT के पीछे हैं और P2P विफल हो जाता है, तो केवल एक पक्ष द्वारा SOCKS5 UDP रिले का उपयोग करने से इसके NAT व्यवहार को प्रभावी ढंग से "easy" में बदल दिया जाता है, जिससे कनेक्शन स्थापित करना बहुत आसान हो जाता है। डेटा एंड-टू-एंड एन्क्रिप्टेड रहता है।
"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"
gonc NAT प्रकारों को तीन श्रेणियों में वर्गीकृत करता है:
Easy: एक एकल आंतरिक पोर्ट कई STUN सर्वरों में एक ही बाहरी पोर्ट पर मैप होता है
Hard: एक एकल आंतरिक पोर्ट STUN सर्वरों में एक सुसंगत लेकिन भिन्न बाहरी पोर्ट पर मैप होता है — प्रकार 1 से कठिन
Symmetric: एक एकल आंतरिक पोर्ट गंतव्य के आधार पर विभिन्न बाहरी पोर्ट पर मैप होता है — सबसे कठिन प्रकार
इन NAT प्रकारों को संभालने के लिए, gonc कई ट्रैवर्सल रणनीतियाँ अपनाता है:
NAT व्यवहार का पता लगाने और मल्टी-एग्ज़िट IP परिदृश्यों की पहचान करने के लिए कई STUN सर्वर का उपयोग करता है
जब दोनों पक्ष समर्थन करते हैं तो IPv6 कनेक्शन को प्राथमिकता देता है (उदाहरण के लिए, TCP6-to-TCP6 डायरेक्ट डायल)
दोनों पीयर TCP पर सुनते हैं जबकि एक साथ एक-दूसरे को डायल करते हैं ताकि TCP होल पंचिंग की सफलता बढ़े
आसान NAT वाला पीयर कठिन पक्ष पर पोर्ट परिवर्तनों को ट्रिगर करने से बचने के लिए अपने प्रारंभिक UDP पैकेट में देरी करता है
कठिन NAT वाला पीयर रिमोट फ़ायरवॉल से हस्तक्षेप कम करने के लिए कम TTL के साथ UDP पैकेट भेजता है
अंतिम उपाय के रूप में, "बर्थडे पैराडॉक्स" रणनीति का उपयोग करता है: कठिन पक्ष 600 यादृच्छिक स्रोत पोर्ट का उपयोग करता है, और दूसरा पक्ष 600 यादृच्छिक गंतव्य पोर्ट का प्रयास करता है, जिससे सफल UDP पोर्ट टकराव की संभावना बढ़ जाती है