คำขอ 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 ภายหลังใช้เส้นทางเดียวกัน เก็บการกำหนดค่าดีบักที่ชัดเจนนี้ไว้ในสภาพแวดล้อมการพัฒนาที่แอปตั้งใจไว้

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