Разобрать DNS-запись SRV, созданную в формате djbdns, используя python - PullRequest
0 голосов
/ 10 мая 2019

Я анализирую файл зоны 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

Будем благодарны за любые советы или подсказки!

1 Ответ

1 голос
/ 10 мая 2019

Думайте о \ 023 \ 304 как о высоких и низких частях. Вам нужно сдвинуть верхнюю часть.

>>> high = '023'
>>> low = '304'
>>> high_dec = int(high, 8)
>>> low_dec = int(low, 8)
>>> (high_dec << 8) + low_dec
5060
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...