การเชื่อมต่อซ็อกเก็ต TCP ของ Asio เข้ากับตัวรับฟัง SOCKS5 ทำให้ขั้นตอนเดียวเสร็จสมบูรณ์: การเชื่อมต่อ TCP ไปยังตัวรับฟังนั้น ไม่ได้ขอให้พร็อกซีเชื่อมต่อกับเซิร์ฟเวอร์ปลายทาง สำหรับการทดสอบเป้าหมายสาธารณะที่ได้รับอนุญาต รายการพร็อกซี SOCKS5 เสนอผู้สมัครสำหรับจุดปลาย TCP แรกนั้น ตัวเชื่อมต่อยังต้องทำการแลกเปลี่ยนด้านล่างให้เสร็จ

จากนั้นตัวเชื่อมต่อ SOCKS5 ต้องดำเนินการแลกเปลี่ยนโปรโตคอล:

  1. ส่งคำทักทายเวอร์ชัน 5 ที่ระบุวิธีการตรวจสอบสิทธิ์ที่ไคลเอนต์รองรับ
  2. อ่านวิธีที่เลือกและทำการแลกเปลี่ยนการตรวจสอบสิทธิ์เมื่อจำเป็น
  3. ส่ง CONNECT พร้อมชนิดที่อยู่ปลายทาง ที่อยู่ และพอร์ตตามลำดับไบต์ของเครือข่าย
  4. อ่านคำตอบ ตรวจสอบเวอร์ชันและรหัสผลลัพธ์ แล้วใช้ที่อยู่ผูกและพอร์ตแบบความยาวแปรผันให้ครบ
  5. ส่งสตรีมที่สร้างขึ้นให้โปรโตคอลของแอปพลิเคชัน

ตัวช่วยที่ชื่อ socks5::async_proxy_connect เป็นของการติดตั้ง SOCKS ที่ให้ตัวช่วยนั้น การเรียกชื่อข้าง boost::asio ไม่ได้ทำให้มันเป็นส่วนหนึ่งของอินเทอร์เฟซซ็อกเก็ต TCP ของ Asio

การอ่าน TCP อาจคืนคำตอบมาเพียงบางส่วน จัดเรียงการอ่านให้ได้จำนวนไบต์ที่ต้องการ จากนั้นเลือกความยาวที่เหลือจากฟิลด์ชนิดที่อยู่ อย่าสันนิษฐานว่าคำตอบของเซิร์ฟเวอร์ทุกอันมีรูปแบบ IPv4 คงที่

สำหรับ HTTPS ให้ทำแฮนด์เชก TLS ของปลายทางหลัง SOCKS CONNECT สำเร็จ โดยรักษา SNI และการตรวจสอบชื่อโฮสต์ของปลายทาง คำตอบพร็อกซีที่สำเร็จเพียงอย่างเดียวไม่ได้ยืนยันตัวเว็บไซต์

รักษาการยกเลิกและกำหนดเวลาไว้ตลอดลำดับการตั้งค่า หากเวลาสร้างการเชื่อมต่อ TCP หมดลง การแลกเปลี่ยนคำทักทาย การตรวจสอบสิทธิ์ และ CONNECT ในภายหลังจะไม่มีขีดจำกัด

บทความที่เกี่ยวข้อง