Получение Datagram Слишком большая ошибка во время записи в NeappproxyudpflowIOS

Программируем под IOS
Ответить
Anonymous
 Получение Datagram Слишком большая ошибка во время записи в Neappproxyudpflow

Сообщение Anonymous »

Я пытаюсь настроить расширение с использованием DNSProxyProvider, который перехватывает трафик DNS на UDP и вводит наш пользовательский идентификатор устройства и отправляет его на наш пользовательский сервер DNS, который дает нам ответ, который я перенаправляю для запроса клиента. Я пытаюсь написать ответ на UDPFLOW, я получаю эту ошибку в журналах консоли. < /P>

error domain = nepproxyflowerrordomain code = 9 "Datagram был слишком большой" userinfo = {nslocalizeddescript Я пробовал до сих пор. Ниже приведен код из моего NEDNSProxyProvider. Запрос DNS - это процесс в функции HandlenewFlow, которая вызывает процесс процесса < /p>
override func handleNewFlow(_ flow: NEAppProxyFlow) -> Bool {
if flow is NEAppProxyTCPFlow {
NSLog("BDDNSProxyProvider : Is TCP Flow...")
} else if let udpFlow = flow as? NEAppProxyUDPFlow {
NSLog("BDDNSProxyProvider: handleNewFlow : \(udpFlow)")
processUDPFlow(udpFlow) // < --
}

return true
}
< /code>
В коде ниже я объединяю доменное имя в запросе с DeviceID и отправьте его на наш сервер. Также есть строки журналов, пожалуйста, игнорируйте их. < /P>
// Read incoming DNS packets from the client
private func processUDPFlow(_ udpFlow: NEAppProxyUDPFlow) {

self.udpAppProxyFlow = udpFlow
udpFlow.readDatagrams { datagrams, error in
if let error = error {
NSLog("Error reading datagrams: \(error.localizedDescription)")
return
}

guard let datagrams = datagrams else {
NSLog("No datagrams received.")
return
}

// Forward each DNS packet to the custom DNS server
for (index, packet) in datagrams.enumerated() {

let dnsMessage = self.parseDNSMessage(from: packet.0)
NSLog("tDatagram Header: \(dnsMessage.header)")
for question in dnsMessage.questions {
NSLog("tDatagram Question: \(question.name), Type: \(question.type), Class: \(question.klass)")
}
for answer in dnsMessage.answers {
NSLog("tDatagram Answer: \(answer.name), Type: \(answer.type), Data: \(answer.data)")
}

let oldDomain = self.extractDomainName(from: packet.0)!
let packetWithNewDomain = self.replaceDomainName(in: packet.0, with: "827-\(oldDomain)") // func to append device ID (827)

NSLog("Packet's new domain \(self.extractDomainName(from: packetWithNewDomain ?? packet.0) ?? "Found nil")")

self.sendToCustomDNSServer(packetWithNewDomain!) { responseDatagram in
guard let responseDatagram = responseDatagram else {
NSLog("Failed to get a response from the custom DNS server")
return
}

let tDatagram = (responseDatagram, packet.1)

udpFlow.writeDatagrams([tDatagram]) { error in
if let error = error {
NSLog("Failed to write DNS response back to client: \(error)")
} else {
NSLog("Successfully wrote DNS response back to client.")
}
}
}
}

// Continue Reading Datagrams
self.processUDPFlow(udpFlow)
}
}
< /code>
Ниже приведена функция, которую я использую для замены DomainName < /p>
func extractDomainName(from datagram: Data) -> String? {
// Ensure the datagram has enough data for a DNS header
guard datagram.count > 12 else { return nil }

// Start reading after the header (12 bytes)
var offset = 12
var domainName = ""

while offset < datagram.count {
// Read the length of the next label
let length = Int(datagram[offset])
offset += 1

// Check for the null terminator (end of domain name)
if length == 0 {
break
}

// Ensure there's enough data for the label
guard offset + length

Подробнее здесь: https://stackoverflow.com/questions/793 ... oxyudpflow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»