【问题标题】:How to handle the leading 4-byte protocol of tun FD packets when reading tun FD directly in C instead of through packetFlow.readPackets in Swift?直接在C中而不是通过Swift中的packetFlow.readPackets读取tun FD时,如何处理tun FD数据包的前导4字节协议?
【发布时间】: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 postDinesh's post 所解释的那样。

但我遇到的问题是没有互联网连接,即使 VPN 显示在设备上已激活并且日志显示 C 代码在移动数据包中起作用。按照从 tun FD 读取的数据包中删除前 4 个字节的想法似乎没有帮助。

我意识到Apple支持明确表示不支持上述转换和使用tun FD的方式。我仍然想采用这种方法,因为这似乎是一种更容易的方法,而不是移植一个可能需要更多时间的整个 C 库。

所以我的问题是: 1. 应该一直剥离 tun 数据包的前 4 个字节,或者只是在什么条件下? 2. tun FD中是否需要在任何数据包中添加前导4字节协议? 3. 你在做什么而我可能错过了?

我非常感谢任何见解。

【问题讨论】:

    标签: vpn tun


    【解决方案1】:

    通过反复试验,我发现在读取后剥离 4 个前导字节,并在写入 tun FD 之前添加它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      • 2020-05-21
      相关资源
      最近更新 更多