नेटवर्किंग पक्ष पर, DNS प्रॉक्सी आईओएस 11 की सबसे बड़ी सुविधाओं में से एक है। लेकिन उन्होंने इसके बारे में अधिक दस्तावेज या नमूने प्रदान नहीं किए हैं। इसमें talk भी है, जहां उन्होंने DNS प्रॉक्सी के साथ क्या संभव है इसका विवरण दिया है।आईओएस में NEDNSProxyProvider का उपयोग कैसे करें 11
मैं इसका एक कामकाजी नमूना बनाना चाहता हूं लेकिन अब तक सफलता प्राप्त नहीं हुई है। इसलिए मैंने DNS प्रॉक्सी एंटाइटेलमेंट के साथ नेटवर्क एक्सटेंशन बनाया है और एक DNS प्रॉक्सी प्रदाता जोड़ा है।
class DNSProxyProvider: NEDNSProxyProvider {
let defaults = UserDefaults(suiteName: "group.com.securly.dnsProxy")
override init() {
NSLog("QNEDNSProxy.Provider: init")
super.init()
// +++ might want to set up KVO on `systemDNSSettings`
}
override func startProxy(options:[String: Any]? = nil, completionHandler: @escaping (Error?) -> Void) {
NSLog("QNEDNSProxy.Provider: start")
// self.defaults?.set("DidStart", forKey: "DidStart")
completionHandler(nil)
}
override func stopProxy(with reason: NEProviderStopReason, completionHandler: @escaping() -> Void) {
NSLog("QNEDNSProxy.Provider: stop")
completionHandler()
}
override func handleNewFlow(_ flow: NEAppProxyFlow) -> Bool {
NSLog("QNEDNSProxy.Provider: new flow (denied)")
// self.defaults?.set("DidHandleNewFlow", forKey: "DidHandleNewFlow")
return true
}
}
फिर AppDelegate में, मैं एक NEDNSProxyManager घोषित करने और के रूप में उपयोग:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
let manager = NEDNSProxyManager.shared()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.enable()
return true
}
private func enable() {
self.update {
self.manager.localizedDescription = "DNSProxySample"
let proto = NEDNSProxyProviderProtocol()
// proto.providerConfiguration = +++
proto.providerBundleIdentifier = "com.securly.dnsProxy"
self.manager.providerProtocol = proto
self.manager.isEnabled = true
}
}
private func disable() {
self.update {
self.manager.isEnabled = false
}
}
private func update(_ body: @escaping() -> Void) {
self.manager.loadFromPreferences { (error) in
guard error == nil else {
NSLog("DNSProxySample.App: load error")
return
}
body()
self.manager.saveToPreferences { (error) in
guard error == nil else {
NSLog("DNSProxySample.App: save error")
return
}
NSLog("DNSProxySample.App: saved")
}
}
}
}
प्रश्न/मुद्दे:
- क्यों
startProxy
याhandleNewFlow
बुलाया नहीं है यहाँ कोड है? क्या सेटअप में कुछ गलत है? - मैं कस्टम DNS पता का उल्लेख कैसे करूं?