diff --git a/Tun/Punchnet/Actors/SDLContextActor.swift b/Tun/Punchnet/Actors/SDLContextActor.swift index 0027c2c..a32c7e5 100644 --- a/Tun/Punchnet/Actors/SDLContextActor.swift +++ b/Tun/Punchnet/Actors/SDLContextActor.swift @@ -693,7 +693,7 @@ actor SDLContextActor { } } - // 处理读取的每个数据包 + // 处理读取的每个数据包, Tun收到的包的一级路由 private func dealTunPacket(packet: IPPacket) async { let networkAddr = self.config.networkAddress let dstIp = packet.header.destination @@ -704,27 +704,39 @@ actor SDLContextActor { self.provider.packetFlow.writePacketObjects([nePacket]) } // 处理dns的解析 - else if DNSHelper.isDnsRequestPacket(ipPacket: packet), case .udp(let udpPacket) = packet.transportPacket { - // 数据是通过offset解析的, dns查询必然是udp包 - let payloadOffset = udpPacket.payloadOffset - let dnsParser = DNSParser(data: packet.data, offset: payloadOffset) - if let dnsMessage = dnsParser.parse(), let name = dnsMessage.questions.first?.name { - // 如果是内部域名,则转发整个ip包的内容到云端服务器 - if name.contains(self.config.networkAddress.networkDomain) { - SDLLogger.log("[SDLContext] get cloud dns request: \(name)") - self.dnsClient?.forward(ipPacketData: packet.data) - } - // 通过本地的dns解析,发送的是udp的payload部分 - else { - // 尝试解析下对不对 - let dnsPayload = Data(packet.data[payloadOffset..