ios - NEDNSProxyProvider iOS 无法浏览任何网站
问题描述
**嗨,我已经配置了 NEDNSProxyProvider,我在以下功能中得到了正确的调用,但在设备上没有网站被打开。**
func handleNewFlow(_ flow: NEAppProxyFlow) -> Bool {
var host = ""
var port = ""
var blocked:Bool = false
var endpoint = NWHostEndpoint.init()
NSLog("DNSProxyProvider handleNewFlow : ")
if let tcpFlow = flow as? NEAppProxyTCPFlow {
host = (tcpFlow.remoteEndpoint as! NWHostEndpoint).hostname
port = (tcpFlow.remoteEndpoint as! NWHostEndpoint).port
NSLog("DNSProxyProvider TCP HOST : \(host)")
NSLog("DNSProxyProvider TCP PORT : \(port)")
NSLog("DNSProxyProvider TCP debugDescription : \(tcpFlow.debugDescription)")
if let ep = tcpFlow.remoteEndpoint as? NWHostEndpoint{
endpoint = ep
}
} else if let udpFlow = flow as? NEAppProxyUDPFlow {
host = (udpFlow.localEndpoint as! NWHostEndpoint).hostname
port = (udpFlow.localEndpoint as! NWHostEndpoint).port
NSLog("DNSProxyProvider UDP HOST : \(host)")
NSLog("DNSProxyProvider UDP PORT : \(port)")
NSLog("DNSProxyProvider UDP debugDescription : \(String(describing: udpFlow.localEndpoint))")
if let ep = udpFlow.localEndpoint as? NWHostEndpoint{
endpoint = ep
}
}
//*
flow.open(withLocalEndpoint: endpoint, completionHandler: { (error) in
if error != nil {
NSLog("DNSProxyProvider: open error: \(error.debugDescription)")
}
});
// */
return true
}
解决方案
我能够解决这个问题,因为我必须为我从 handleNewFlow 函数返回 true 的 dns 数据包提供 IP。这是基本流程
在 flowReference 检查错误时调用 open,如果错误为 nil 调用 readDatagrams 将数据报发送到您的服务器以解决它们 调用 writeDatagrams 并从服务器重新调整修改的数据报,然后通过再次调用 readDatagrams 或关闭句柄来检查是否存在更多数据报
推荐阅读
- html - 如何禁止子元素从网格布局中的父元素扩展
- python - 如何解决“cuda 2D conv 问题”?
- php - 如何使用 PHP 将文件 .png 转换为 .CUBE
- python - 在 Python 中计算 3D 模型的体积
- latex - Latex Beamer 中的开关覆盖规范
- npm - 如何确保 npm 使用特定包的子依赖版本?
- python - 在 Visual Studio 中来自 c++ 的 python
- c# - Winform 在执行下一行之前显示等待
- db2 - 在 IBM Db2 on Cloud 中定义比所需更长的 VARCHAR() 列是否会浪费空间?
- python - 如何将数据从 AWS 上的脚本发送到(Wix)网站?