diff --git a/Tun/Punchnet/DNS/DNSLocalClient.swift b/Tun/Punchnet/DNS/DNSLocalClient.swift index 282d2cb..76b0d90 100644 --- a/Tun/Punchnet/DNS/DNSLocalClient.swift +++ b/Tun/Punchnet/DNS/DNSLocalClient.swift @@ -81,26 +81,25 @@ final class DNSLocalClient { } private func handleResponse(data: Data) { - let dnsParser = DNSParser(data: data, offset: 0) - if let message = dnsParser.parse() { - let tranId = message.transactionID - - locker.lock() - let items = self.trackers.removeValue(forKey: tranId) - locker.unlock() - - if let items { - items.forEach { tracker in - let packet = Self.createDNSResponse( - payload: data, - srcIP: DNSHelper.dnsDestIpAddr, - srcPort: 53, - destIP: tracker.clientIP, - destPort: tracker.clientPort - ) - self.packetContinuation.yield(packet) - } - } + guard data.count > 2 else { + return + } + + let tranId = UInt16(data[0]) << 8 | UInt16(data[1]) + + locker.lock() + let items = self.trackers.removeValue(forKey: tranId) + locker.unlock() + + items?.forEach { tracker in + let packet = Self.createDNSResponse( + payload: data, + srcIP: DNSHelper.dnsDestIpAddr, + srcPort: 53, + destIP: tracker.clientIP, + destPort: tracker.clientPort + ) + self.packetContinuation.yield(packet) } }