ยูสุเกะเจาะรูผ่าน NAT ของคุณ
ข้อจำกัดความรับผิดชอบ : นี่ไม่ใช่แอปพลิเคชันแชทที่พร้อมใช้งานจริง แม้ว่าจะสร้าง client <-> client
และ client <-> server
รหัสนี้ยังไม่ได้รับการตรวจสอบหรือทดสอบโดยผู้เชี่ยวชาญด้านความปลอดภัยใดๆ นี่เป็นเพียงแบบฝึกหัดสำหรับฉันเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเครือข่ายและเทคโนโลยี P2P พร้อมทั้งยกตัวอย่างเทคโนโลยีที่ใช้สำหรับผู้อื่นที่สนใจเรียนรู้ นอกจากนี้ ไคลเอนต์ udp ไม่ได้ใช้โปรโตคอลที่รับประกันการส่งข้อความได้สำเร็จ และบางส่วนจะสูญหายไปเนื่องจากการเชื่อมต่อที่ไม่แน่นอน
คลิกที่ภาพด้านบนเพื่อดูวิดีโอ YouTube ของแอปแชทที่ใช้งานจริง เทอร์มินัลที่มุมขวาบนคือ SSHed ใน VPS ซึ่งรันเซิร์ฟเวอร์นัดพบ เทอร์มินัลที่ด้านล่างขวาคือ UI เทอร์มินัล เว็บแอปทางด้านซ้ายคือ GUI
go get github.com/wilfreddenton/udp-hole-punching
แพ็คเกจหลักคือเซิร์ฟเวอร์นัดพบ ค้นหา VPS หรืออะไรสักอย่างเพื่อโฮสต์มัน คุณสามารถเรียกใช้ทุกอย่างในเครื่องได้ แต่จะไม่ทดสอบว่าการเจาะรูใช้งานได้จริงหรือไม่เนื่องจากอยู่ในเครื่องเดียวกัน ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์มีพอร์ต TCP และ UDP ที่เปิดรับการรับส่งข้อมูลขาเข้าตั้งแต่ 0-65535
หากต้องการเรียกใช้:
go install
มีสอง UI ที่คุณสามารถใช้ gui
ซึ่งเป็น UI ของเว็บและ term-ui
ซึ่งเป็น UI ของเทอร์มินัล คุณสามารถใช้ UI ผสมกันแบบใดก็ได้
ก่อนที่คุณจะใช้คุณควรเปิดไฟล์ main.go
และสลับค่าคงที่ serverTCPIP
และ serverUDPIP
เป็นที่อยู่ IP ของเซิร์ฟเวอร์นัดพบของคุณ (ไม่มีพอร์ต)
เพื่อเรียกใช้เว็บ UI
cd gui/ui
npm install
npm run build
cd ..
go install
gui
หากเซิร์ฟเวอร์นัดพบของคุณทำงานบนเครื่องหรือ gui -serverIP=<server IP here>
localhost:8000
หากต้องการยกเลิกการเชื่อมต่อและเริ่มแชทใหม่ เพียงรีเฟรช
เพื่อเรียกใช้ UI เทอร์มินัล
cd term-ui
go install
term-ui
หากเซิร์ฟเวอร์ rendezvouse ของคุณทำงานอยู่ในเครื่อง term-ui -serverIP=<server IP here>
หากต้องการตัดการเชื่อมต่อและเริ่มแชทใหม่ ctrl-c
เพื่อออกจากโปรแกรมและรันอีกครั้ง
หากไม่ใช่เพื่อน ให้เข้าถึงคอมพิวเตอร์ที่อยู่หลังเราเตอร์อื่นและตั้งค่าไคลเอนต์ที่นั่น
รันไคลเอนต์และมอบ PeerID ของไคลเอนต์หนึ่งให้กับไคลเอนต์อื่น และหากโทโพโลยีเครือข่ายอนุญาตให้เจาะรู คุณจะสร้างการเชื่อมต่อที่เข้ารหัสระหว่างไคลเอนต์
ID
ของเพียร์ที่ต้องการสื่อสารด้วยเพื่อให้การใช้งานการเจาะรูง่ายขึ้นเล็กน้อย ไคลเอนต์จะต้องไม่พยายามเชื่อมต่อกับที่อยู่ IP ส่วนตัวของกันและกัน ลูกค้าที่อยู่หลัง NAT เดียวกันจะยังสามารถเชื่อมต่อได้ แต่จะเชื่อมต่อกับที่อยู่ IP สาธารณะ ไม่ใช่ส่วนตัว เราเตอร์ที่ฉันทดสอบดูเหมือนจะเข้าใจว่าเพื่อนอยู่ในเครือข่ายท้องถิ่นและอำนวยความสะดวกในการเชื่อมต่อโดยไม่ต้องเชื่อมต่อกับอินเทอร์เน็ตภายนอก