ตัวเชื่อมต่อที่รู้จัก SOCKS สำหรับซ็อกเก็ต TCP ของ Python
เลือกตัวเชื่อมต่อซ็อกเก็ตที่รู้จักพร็อกซี และแยกขอบเขตออกจากการใช้งานซ็อกเก็ตทั่วทั้งโปรเซสของ Python
ซ็อกเก็ต Python ดิบไม่เจรจาพร็อกซีเพียงเพราะมี http_proxy สำหรับแอปพลิเคชันที่พูดโปรโตคอล TCP ของตัวเอง ให้ใช้ตัวเชื่อมต่อที่เข้าใจบริการที่ปลายทางพร็อกซี
เมื่อมี PySocks อยู่แล้ว ให้สร้างการเชื่อมต่ออย่างชัดเจน:
import socks
with socks.socksocket() as connection:
connection.set_proxy(socks.SOCKS5, '203.0.113.10', 1080)
connection.settimeout(10)
connection.connect(('example.com', 12345))
# Exchange the destination protocol here.
แทนที่ที่อยู่เอกสารและพอร์ตปลายทาง สำหรับปลายทางสาธารณะที่ได้รับอนุญาต ให้เลือกผู้สมัครจากรายการพร็อกซี SOCKS5หลังจากตรวจสอบแล้วว่าเปิดพอร์ตเป้าหมายของแอปพลิเคชัน ตรวจสอบแพ็กเกจที่ติดตั้ง วิธีการที่รองรับ และข้อกำหนดของปลายทางเทียบกับอินเทอร์เฟซ PySocks
ส่วนที่เหลือของแอปพลิเคชันแลกเปลี่ยนโปรโตคอลผ่านการเชื่อมต่อที่สร้างขึ้นนี้ หากโปรโตคอลนั้นใช้ TLS ให้เริ่มหลังจากเจรจาพร็อกซีและตรวจสอบชื่อโฮสต์ปลายทางจริง การพิสูจน์ตัวตนพร็อกซีสร้างเส้นทาง แต่ไม่ได้ให้การเข้าสู่ระบบปลายทางหรือการเข้ารหัส
ผู้รับฟัง SOCKS ต้องการการเจรจา SOCKS บริการ HTTP ต้องการตัวเชื่อมต่อที่รองรับ CONNECT สำหรับปลายทาง TCP โดยพลการ และอาจปฏิเสธพอร์ตของตน เลือกตัวเชื่อมต่อตามบริการที่เสนอจริง แทนการเปลี่ยนที่อยู่แล้วปล่อยให้แฮนด์เชกผิด
ให้การแทนที่อยู่ภายในเครื่อง การกำหนดคลาสให้ socket.socket อาจส่งผลต่อการนำเข้าและไลบรารีที่ไม่เกี่ยวข้อง หากไลบรารีอื่นเป็นเจ้าของการสร้างซ็อกเก็ต ให้ใช้โรงงานเชื่อมต่อที่จัดทำเอกสารไว้หรือตัวเลือกพร็อกซีของมัน พจนานุกรมที่มันไม่เคยอ่านไม่สามารถเปลี่ยนการเชื่อมต่อนั้นได้