Trên iOS 17 và mới hơn, Network.framework có thể áp dụng proxy SOCKSv5 thông qua ngữ cảnh quyền riêng tư. Đính kèm ngữ cảnh đó vào các tham số trước khi tạo kết nối:

import Network

@available(iOS 17.0, *)
func makeConnection() -> NWConnection {
    let parameters = NWParameters.tls
    let context = NWParameters.PrivacyContext(description: "Service route")
    let endpoint = NWEndpoint.hostPort(
        host: "proxy.example", port: 1080)
    context.proxyConfigurations = [
        ProxyConfiguration(socksv5Proxy: endpoint)
    ]
    parameters.setPrivacyContext(context)
    return NWConnection(
        host: "service.example", port: 443, using: parameters)
}

Hàm trả về một kết nối TLS chưa được khởi động. Cài đặt xử lý trạng thái của ứng dụng, khởi động nó trên hàng đợi dự định, sau đó trao đổi giao thức ứng dụng qua đường gửi và nhận thông thường của nó.

proxy.example:1080 là trình lắng nghe SOCKS. Đối với các kết nối dịch vụ công cộng được phép, danh sách proxy SOCKS5 cung cấp các ứng viên máy chủ và cổng. service.example:443 vẫn là đích. Ngữ cảnh quyền riêng tư áp dụng cấu hình proxy của nó cho các kết nối được liên kết với ngữ cảnh đó; việc tạo một kết nối không liên quan với các tham số khác không kế thừa thiết lập này.

Đây là giao diện kết nối của Network.framework. Việc ghi đè proxy của URLSession hoặc cài đặt kho dữ liệu của WKWebView cấu hình những người dùng riêng biệt đó. Đối với WebSocket được xây dựng trên NWConnection, ứng dụng cũng phải cung cấp các tùy chọn giao thức WebSocket thích hợp.

Bài viết liên quan