I'm trying to parse the data packets in NEPacketTunnelProvider subclass but after trying different ways not able to parse the data.
private func readPackets() {
self.packetFlow.readPackets() { datas, protocolNumbers in
self.sendPackets(datas, withProtocols: protocolNumbers)
if let dataArray = datas as? [Data] {
for dataPackets in dataArray {
let ipHeader = self.processPacket(dataPackets, protocolNumber: 0)
self.headerData.append(ipHeader)
}
}
self.readPackets()
}
}
private func processPacket(_ rawData: Data, protocolNumber: NSNumber)-> IPHeader {
let data = BinaryData.init(data: rawData, bigEndian: true)
let header = IPHeader(version: try? data.get(0),
headerLength: try? data.get(1),
typeOfService: try? data.get(2),
length: try? data.get(3),
id: try? data.get(5),
offset: try? data.get(7),
timeToLive: try? data.get(8),
proto: try? data.get(9),
checksum: try? data.get(10),
source: in_addr(s_addr: try! data.get(12)),
destination: in_addr(s_addr:try! data.get(16)))
return header
}