กำหนดเส้นทาง WebSocket ของ URLSession ผ่าน SOCKS5 บน iOS 17+
กำหนดค่า URLSessionWebSocketTask ผ่านพร็อกซี SOCKSv5 ระดับเซสชันบน iOS 17 หรือใหม่กว่า และแยกการกำหนดเส้นทางออกจากการถอดรหัส WSS
คำขอ HTTPS ปกติของแอป iOS อาจปรากฏในพร็อกซีสำหรับดีบัก ขณะที่ทราฟฟิก WebSocket ของแอปหายไป ระบุชนิดการรับส่ง WebSocket ก่อน: URLSessionWebSocketTask ใช้การกำหนดค่าพร็อกซีระดับเซสชันได้ ขณะที่ไลบรารีที่เปิดซ็อกเก็ตเองต้องมีการผสานรวมที่รองรับของตัวเอง สำหรับการเชื่อมต่อ Network.framework ดิบบน iOS 17+ ให้กำหนดค่า บริบทพร็อกซีของ NWConnection เอง
บน iOS 17 หรือใหม่กว่า ให้สร้างเซสชันด้วยพร็อกซี SOCKSv5 ที่ระบุชัดเจน:
import Foundation
import Network
@available(iOS 17.0, *)
func makeDebugSession() -> URLSession {
let configuration = URLSessionConfiguration.default
let endpoint = NWEndpoint.hostPort(
host: "192.0.2.10", port: 8889)
configuration.proxyConfigurations = [
ProxyConfiguration(socksv5Proxy: endpoint)
]
return URLSession(configuration: configuration)
}แทนที่ที่อยู่และพอร์ตในเอกสารด้วยตัวรับฟัง SOCKS ที่เข้าถึงได้ของพร็อกซีดีบักที่มีอยู่ เปิดใช้งานตัวรับฟังนั้นในแอปพร็อกซี ตัวรับฟัง HTTP ของมันอาจอยู่บนพอร์ตอื่น
สร้าง webSocketTask จากเซสชันที่ส่งคืน งานที่สร้างผ่าน URLSession อื่นจะไม่สืบทอดการแทนที่ของเซสชันนี้ อาร์เรย์ proxyConfigurations ว่างใช้ค่าเริ่มต้นของระบบ ไม่ใช่การเลือกเส้นทางตรงอย่างชัดเจน
การเข้าถึงได้และข้อความที่อ่านได้เป็นหมุดหมายคนละขั้น
โทรศัพท์จริงต้องมีที่อยู่ที่เข้าถึงคอมพิวเตอร์สำหรับดีบัก บนโทรศัพท์นั้น 127.0.0.1 หมายถึงตัวโทรศัพท์เอง ตรวจสอบอินเทอร์เฟซของตัวรับฟังและการเข้าถึงไคลเอนต์ที่พร็อกซีอนุญาตเมื่อการเชื่อมต่อไม่เคยไปถึง
เส้นทาง SOCKS ขนส่งการเชื่อมต่อ การอ่านเนื้อหา wss ต้องมีการตั้งค่าตรวจสอบ TLS ของเครื่องมือดีบักและความเชื่อถือที่เหมาะสมบนอุปกรณ์ การปักหมุดใบรับรองหรือการใช้งาน TLS แยกต่างหากอาจขัดขวางการตรวจสอบนั้นแม้ทราฟฟิกจะไปถึงตัวรับฟัง
มองหาการแลกเปลี่ยน WebSocket และข้อความหลังจากสร้างการเชื่อมต่อแล้ว การเห็นเพียงคำขอ polling หนึ่งรายการจากแอป Socket.IO ไม่ใช่หลักฐานว่าการรับส่ง WebSocket ภายหลังใช้เส้นทางเดียวกัน เก็บการกำหนดค่าดีบักที่ชัดเจนนี้ไว้ในสภาพแวดล้อมการพัฒนาที่แอปตั้งใจไว้