0

我正在尝试从数据包隧道 NEPacketTunnelProvider 读取数据。现在我正在做的是尝试使用

 self.packetFlow.readPackets { [weak self] (packets: [Data], protocols: [NSNumber]) in }

功能。它似乎工作正常。但是现在我想通过使用 self.packetFlow 函数的网络句柄来读取数据包,就像这样

 let tunFd = self.packetFlow.value(forKeyPath: "socket.fileDescriptor") as! Int32

并使用此文件描述符从隧道中读取数据包数据。像这样

    char *buffer1 = malloc(1024);
    ssize_t length = read(tunFd, buffer1, 1024);

但是现在当我像这样从套接字读取数据时。似乎数据与我之前使用 self.packetFlow 收到的数据不相似。

有没有人知道为什么会这样。我应该怎么做才能获得与 self.packetFlow.readPackets 中类似的数据。

任何帮助指针将不胜感激。

4

1 回答 1

0

我找到了答案或我自己的查询。当我们使用文件描述符时,有 4 个字节的额外协议信息添加到数据中。我们也需要处理它。

于 2019-01-07T09:54:05.943 回答