يقوم Yusuke بإحداث ثقب في NAT الخاص بك
إخلاء المسؤولية : هذا ليس تطبيق دردشة جاهزًا للإنتاج. على الرغم من أنه يقوم بإنشاء اتصالات مشفرة AES client <-> client
client <-> server
، إلا أن هذا الرمز لم يتم تدقيقه أو اختباره من قبل أي متخصصين في الأمان. هذا مجرد تمرين بالنسبة لي لمعرفة المزيد عن شبكات وتقنيات P2P بالإضافة إلى تقديم بعض الأمثلة على التقنيات المستخدمة للآخرين المهتمين بالتعلم. بالإضافة إلى ذلك، لا يقوم عميل udp بتنفيذ بروتوكول يضمن التسليم الناجح للرسائل، وبالتالي سيتم فقدان بعضها عبر الاتصالات المتقطعة.
انقر على الصورة أعلاه لمشاهدة فيديو يوتيوب لتطبيق الدردشة أثناء العمل. يتم تحويل المحطة الموجودة في الزاوية اليمنى العليا إلى خادم VPS الذي يقوم بتشغيل خادم الالتقاء. المحطة الموجودة في أسفل اليمين هي واجهة المستخدم الطرفية. تطبيق الويب الموجود على اليسار هو واجهة المستخدم الرسومية.
go get github.com/wilfreddenton/udp-hole-punching
الحزمة الرئيسية هي خادم الموعد. ابحث عن VPS أو أي شيء لاستضافته عليه. يمكنك تشغيل كل شيء محليًا ولكن لن يتم اختبار ما إذا كان ثقب الثقب يعمل أم لا لأنه موجود على نفس الجهاز. تأكد من أن الخادم يحتوي على منافذ TCP وUDP مفتوحة لحركة المرور الواردة من 0-65535.
لتشغيله:
go install
هناك نوعان من واجهات المستخدم التي يمكنك استخدامها واجهة gui
وهي واجهة مستخدم الويب term-ui
وهي واجهة مستخدم طرفية. يمكنك استخدام أي مجموعة من واجهات المستخدم.
قبل أن تستخدم واحدًا، يجب عليك فتح ملف main.go
وتبديل ثوابت serverTCPIP
و serverUDPIP
إلى عنوان IP الخاص بخادم الموعد (بدون منفذ).
لتشغيل واجهة مستخدم الويب
cd gui/ui
npm install
npm run build
cd ..
go install
gui
إذا كان خادم الموعد الخاص بك يعمل محليًا أو gui -serverIP=<server IP here>
localhost:8000
لقطع الاتصال وبدء محادثة جديدة، ما عليك سوى التحديث.
لتشغيل واجهة المستخدم الطرفية
cd term-ui
go install
term-ui
إذا كان خادم موعدك يعمل محليًا term-ui -serverIP=<server IP here>
لقطع الاتصال وبدء محادثة جديدة ctrl-c
للخروج من البرنامج وتشغيله مرة أخرى.
إذا لم تكن صديقًا، فيمكنك الوصول إلى جهاز كمبيوتر خلف جهاز توجيه مختلف وإعداد عميل هناك.
قم بتشغيل العملاء وتوفير معرف النظير الخاص بأحد العملاء إلى العميل الآخر، وإذا كانت طوبولوجيا الشبكة تسمح بعمل ثقب، فسوف تقوم بإنشاء اتصال مشفر بين العملاء.
ID
النظير الذي يرغب في الاتصال بهلجعل عملية تنفيذ الثقب أبسط قليلاً، لا يحاول العملاء الاتصال بعناوين IP الخاصة ببعضهم البعض. سيظل العملاء الذين يستخدمون نفس NAT قادرين على الاتصال ولكنهم سيفعلون ذلك باستخدام عناوين IP العامة وليس الخاصة. يبدو أن أجهزة التوجيه التي اختبرتها أدركت أن أقرانها كانوا على شبكتها المحلية وسهلوا الاتصال دون الذهاب إلى الإنترنت الخارجي.