Я анализирую файл зоны DNS, написанный в формате TinyDNS (djbdns), и у меня возникают проблемы с декодированием записей SRV.
Я до сих пор могу правильно разобрать все из записи SRV, но приведенный ниже ответ, содержащий набор восьмеричных чисел для приоритета, веса и порта (нормальные значения для записи DNS SRV), может быть генерируется из здесь
:_sip._tcp.example.com:33:\000\012\000\144\023\304\003pbx\007example\003com\000:86400
У меня возникла проблема с ответом DNS:
\000\012\000\144\023\304\003pbx\007example\003com\000
Первые 24 символа
\000\012\000\144\023\304
Остальные символы
\003pbx\007example\003com\000
Первые 24 символа содержат приоритет, вес и порт сервиса, который будет использовать DNS, от 24-го графика до конца строки - целевой хост, который предоставляет сервис. Таким образом, синтаксический анализ цели прост, каждый восьмеричный набор перед строкой - это число ожидаемых символов между ними и удаление периодов.
Приоритет, Вес и Порт принимают значения от 0 до 65535, которые преобразуют значения в 2 набора по 255, т. Е. \ 000 \ 144 = 10 десятичных знаков, но если число превышает 256 бит, то используется второй набор, т. Е. \ 023 \ 304 = 5060 На данный момент я заблокирован. Я понятия не имею, что они делают, конвертирование каждого набора по отдельности или вместе не дает мне правильное десятичное число. Я знаю, что я близко, но супер заблокирован. Я использую метод int по умолчанию для преобразования из восьмеричного в десятичное, что довольно просто.
octal = '144'
dec = int(octal, 8)
После того, как я проанализирую это, это должно быть что-то вроде этого (очевидно, пробелы - это то, что я делаю в своем коде для согласования значений.
10 100 5060 pbx.example.com
Будем благодарны за любые советы или подсказки!