在 iOS 17 及更高版本中,Network.framework 可以通过隐私上下文应用 SOCKSv5 代理。在创建连接之前,将该上下文附加到参数:

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)
}

该函数返回一个尚未启动的 TLS 连接。安装应用的状态处理,在目标队列上启动它,然后通过其常规发送和接收路径交换应用协议。

proxy.example:1080 是 SOCKS 监听器。对于允许的公共服务连接,SOCKS5 代理列表提供主机和端口候选。service.example:443 仍是目标。隐私上下文将其代理配置应用于与该上下文关联的连接;使用其他参数创建无关连接不会继承此设置。

这是 Network.framework 的连接接口。URLSession 代理覆盖或 WKWebView 数据存储设置配置那些独立的消费者。对于基于 NWConnection 构建的 WebSocket,应用还必须提供适当的 WebSocket 协议选项。

相关文章