我正在尝试从数据包隧道NEPacketTunnelProvider中读取数据。 现在,我正在尝试使用
读取数据let tracker1 = GAI.sharedInstance().tracker(withTrackingId: "...")
let hitParams = GAIDictionaryBuilder()
hitParams.setCampaignParametersFromUrl(path)
let medium = self.getQueryStringParameter(url: path, param: "utm_medium")
hitParams.set(medium, forKey: kGAICampaignMedium)
hitParams.set(path, forKey: kGAICampaignSource)
let hitParamsDict = hitParams.build()
tracker1?.allowIDFACollection = true
tracker1?.set(kGAIScreenName, value: "...")
tracker1?.send(GAIDictionaryBuilder.createScreenView().setAll(hitParamsDict as? [AnyHashable : Any]).build() as? [AnyHashable : Any])
// this is for url utm_medium parameter
/*
func getQueryStringParameter(url: String, param: String) -> String? {
guard let url = URLComponents(string: url) else { return nil }
return url.queryItems?.first(where: { $0.name == param })?.value
}*/
功能。 它似乎工作正常。但是现在我想通过使用self.packetFlow函数的网络句柄来读取数据包,例如
self.packetFlow.readPackets { [weak self] (packets: [Data], protocols: [NSNumber]) in }
,并使用此文件描述符从隧道读取数据包数据。像这样
let tunFd = self.packetFlow.value(forKeyPath: "socket.fileDescriptor") as! Int32
但是现在当我像这样从套接字读取数据时。看来数据与我之前使用self.packetFlow收到的数据不相似。
还有谁知道为什么会这样。以及我应该如何获得与self.packetFlow.readPackets中相似的数据。
任何帮助指针将不胜感激。
答案 0 :(得分:0)
我找到了答案或我自己的查询。使用文件描述符时,向数据中添加了4个字节的额外协议信息。我们也需要处理它。