تكوين تمرير SOCKS5 عبر NWConnection على iOS 17+
اربط ProxyConfiguration من نوع SOCKSv5 الخاص بـ iOS 17 بـ NWParameters.PrivacyContext قبل إنشاء NWConnection.
في 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 بتكوين هؤلاء المستهلكين المنفصلين. وبالنسبة إلى WebSocket المبني على NWConnection، يجب على التطبيق أيضاً توفير خيارات بروتوكول WebSocket المناسبة.