Я пытаюсь настроить расширение с использованием 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
Получение Datagram Слишком большая ошибка во время записи в Neappproxyudpflow ⇐ IOS
Программируем под IOS
1745251533
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79382897/getting-a-datagram-too-large-error-while-writing-back-to-neappproxyudpflow[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия