【发布时间】:2020-10-04 05:44:09
【问题描述】:
在 iOS SimpleTunnel VPN 演示应用中,它通过 packetFlow.readPackets() 读取虚拟 tun 接口。在我的例子中,Swift 将控制权交给 C 来在隧道和虚拟 tun 接口之间移动数据包。 tun 文件描述符将通过这种转换从 Swift 发送到 C:
let tunFd = self.packetFlow.value(forKeyPath: "socket.fileDescriptor") as! Int32
正如spensaurus in this post 和Dinesh's post 所解释的那样。
但我遇到的问题是没有互联网连接,即使 VPN 显示在设备上已激活并且日志显示 C 代码在移动数据包中起作用。按照从 tun FD 读取的数据包中删除前 4 个字节的想法似乎没有帮助。
我意识到Apple支持明确表示不支持上述转换和使用tun FD的方式。我仍然想采用这种方法,因为这似乎是一种更容易的方法,而不是移植一个可能需要更多时间的整个 C 库。
所以我的问题是: 1. 应该一直剥离 tun 数据包的前 4 个字节,或者只是在什么条件下? 2. tun FD中是否需要在任何数据包中添加前导4字节协议? 3. 你在做什么而我可能错过了?
我非常感谢任何见解。
【问题讨论】: