swift - iOS 网络扩展错误创建 TUN/TAP 接口 SIOCGIFMTU 失败:设备未配置
问题描述
目前正在开发一个网络扩展,它允许我使用OpenVPNAdapter库使用.ovpn
文件使用 VPN 建立连接。我已将我的配置正确保存到系统设置中,并且在运行扩展程序以执行调试时,我的扩展程序状态从断开连接更改,保持连接一段时间然后断开连接。通过网络扩展进一步检查设备和过滤的控制台日志,我收到三个主要错误消息。
来自提供者的日志消息:TUN 错误:无法获取 tun 接口套接字
SIOCGIFMTU 失败:设备未配置
NEVirtualInterfaceAdjustReadBufferSize: interface_get_mtu failed (6), 默认为 max mtu
我现在不知道该去哪里,因为我正在使用设备上的控制台调试网络扩展。
解决方案
好的,我设法自己解决了这个问题。我创建了一个 Packet Tunnel 网络扩展,在我的 PacketTunnelProvider 类中出现了问题。它没有崩溃,因此在该类中设置调试器是不值得的。我运行了我的目标并启动了我的应用程序并在函数中设置了几个 NSLog,这样我就可以在设备的控制台中看到正在发生的事情。我的问题是我试图在字典中为一个键设置一个 nil 值,从而终止扩展。在控制台中可以很容易地看到该崩溃消息。
问题是在函数中扩展PacketTunnelProvider
配置OpenVPNAdapterDelegate
隧道时
func openVPNAdapter(_ openVPNAdapter: OpenVPNAdapter, configureTunnelWithNetworkSettings networkSettings: NEPacketTunnelNetworkSettings?, completionHandler: @escaping (OpenVPNAdapterPacketFlow?) -> Void) {
networkSettings?.dnsSettings?.matchDomains = [""];
}
以前我是networkSettings.dnsSettings?.matchDomains = [""];
这样networkSettings
被打开的,这nil
使得扩展程序崩溃并且隧道无法连接。
推荐阅读
- bash - 根据 bash 脚本中的部分名称和目录位置找出文件的路径
- node.js - 访问部署在 Azure 上的 React 应用程序中的应用程序设置
- vba - VBA比较2个数组循环>>突出显示并将差异复制到第三列
- swing - Intellij 2018.1 无法加载任何目录或项目
- python - 使用 sklean 和 seed 时神经网络结果不一致
- android - 使用 AsyncTask 获取响应时出错?
- ios - 如何在 swift 4 中从 UIImage 读取 exif 数据?
- php - 如何在 PHP Web 应用程序中实现 Mozilla DeepSpeech 以将语音转换为文本?
- ubuntu-16.04 - 第二个界面 Linux bash 脚本
- python - Python中的多维逼近