Asio ต้องการการแลกเปลี่ยน SOCKS5 หลังจากเชื่อมต่อกับพร็อกซี
มอง SOCKS5 เป็นเครื่องจักรสถานะของโปรโตคอลบนซ็อกเก็ต Asio โดยอ่านให้ครบ ตรวจสอบคำตอบ และทำ TLS ปลายทางหลัง CONNECT สำเร็จเท่านั้น
การเชื่อมต่อซ็อกเก็ต TCP ของ Asio เข้ากับตัวรับฟัง SOCKS5 ทำให้ขั้นตอนเดียวเสร็จสมบูรณ์: การเชื่อมต่อ TCP ไปยังตัวรับฟังนั้น ไม่ได้ขอให้พร็อกซีเชื่อมต่อกับเซิร์ฟเวอร์ปลายทาง สำหรับการทดสอบเป้าหมายสาธารณะที่ได้รับอนุญาต รายการพร็อกซี SOCKS5 เสนอผู้สมัครสำหรับจุดปลาย TCP แรกนั้น ตัวเชื่อมต่อยังต้องทำการแลกเปลี่ยนด้านล่างให้เสร็จ
จากนั้นตัวเชื่อมต่อ SOCKS5 ต้องดำเนินการแลกเปลี่ยนโปรโตคอล:
- ส่งคำทักทายเวอร์ชัน 5 ที่ระบุวิธีการตรวจสอบสิทธิ์ที่ไคลเอนต์รองรับ
- อ่านวิธีที่เลือกและทำการแลกเปลี่ยนการตรวจสอบสิทธิ์เมื่อจำเป็น
- ส่ง CONNECT พร้อมชนิดที่อยู่ปลายทาง ที่อยู่ และพอร์ตตามลำดับไบต์ของเครือข่าย
- อ่านคำตอบ ตรวจสอบเวอร์ชันและรหัสผลลัพธ์ แล้วใช้ที่อยู่ผูกและพอร์ตแบบความยาวแปรผันให้ครบ
- ส่งสตรีมที่สร้างขึ้นให้โปรโตคอลของแอปพลิเคชัน
ตัวช่วยที่ชื่อ socks5::async_proxy_connect เป็นของการติดตั้ง SOCKS ที่ให้ตัวช่วยนั้น การเรียกชื่อข้าง boost::asio ไม่ได้ทำให้มันเป็นส่วนหนึ่งของอินเทอร์เฟซซ็อกเก็ต TCP ของ Asio
การอ่าน TCP อาจคืนคำตอบมาเพียงบางส่วน จัดเรียงการอ่านให้ได้จำนวนไบต์ที่ต้องการ จากนั้นเลือกความยาวที่เหลือจากฟิลด์ชนิดที่อยู่ อย่าสันนิษฐานว่าคำตอบของเซิร์ฟเวอร์ทุกอันมีรูปแบบ IPv4 คงที่
สำหรับ HTTPS ให้ทำแฮนด์เชก TLS ของปลายทางหลัง SOCKS CONNECT สำเร็จ โดยรักษา SNI และการตรวจสอบชื่อโฮสต์ของปลายทาง คำตอบพร็อกซีที่สำเร็จเพียงอย่างเดียวไม่ได้ยืนยันตัวเว็บไซต์
รักษาการยกเลิกและกำหนดเวลาไว้ตลอดลำดับการตั้งค่า หากเวลาสร้างการเชื่อมต่อ TCP หมดลง การแลกเปลี่ยนคำทักทาย การตรวจสอบสิทธิ์ และ CONNECT ในภายหลังจะไม่มีขีดจำกัด