Запись более 255 символов данных в записи TXT или SPF - PullRequest
2 голосов
/ 29 апреля 2019

Хотя почерк DNS-сообщений с нуля, я могу отправлять TXT-записи до 255 символов с этим псевдо C кодом:

char use_this[1024];
memset(use_this, 0, 1024); 
use_this[0] = len;
for (int i = 0; i < len; i++){
        use_this[i + 1] = txt_record[i];
}

Выходит, провод в порядке.Однако, когда дело доходит до строк TXT или SPF с> 255 символами, я теряюсь и нуждаюсь в помощи!

   |###[ DNS Resource Record ]###
   |  rrname    = 'bbc.com.'
   |  type      = SPF
   |  rclass    = IN
   |  ttl       = 748
   |  rdlen     = 334
   |  rdata     = '\xdav=spf1 ip4:212.58.224.0/19 ip4:132.185.0.0/16 ip4:78.136.53.80/28 ip4:78.136.14.192/27 ip4:78.136.19.8/29 ip4:89.234.10.72/29 ip4:74.112.66.33 ip4:208.251.80.51 ip4:89.202.185.0/24 ip4:207.159.133.98 ip4:207.159.133.99r include:msgfocus.com include:cmail1.com include:mktomail.com include:servers.mcsv.net include:redsnapper.net ?all'
  ns        = None

Для длинной строки в 336 символов это должно быть: [255][chars0:255] + [81][255:] или [336][chars<>],или что-то еще очевидно что я пропустил?

Мы можем иметь записи TXT / SPF размером более 255 символов, но не более 255 символов в одной строке.Ищите указатели на то, как написать длинную запись (из нескольких строк), чтобы я мог отправить ее через базовый сокет.Спасибо!

1 Ответ

1 голос
/ 30 апреля 2019

Вы не можете вернуть фрагмент текста длиннее 255 байт, это не разрешено форматом DNS.

SPF позволяет разбить запись на фрагменты. в соответствии с https://tools.ietf.org/html/rfc7208#section-3.3 вы можете разбить строку в любой позиции, так как границы фрагментов не являются синтаксически значимыми, большинство людей разделяются между предложениями, но это не требуется.

При возврате нескольких фрагментов текста просто объедините их так же, как это делается для доменных имен. В RFC ничего не говорится о разбиениях, которые обрезают сигнатуру "v = spf1", поэтому длина первого сегмента должна быть не менее 7 байтов.

[длина1 байт] "строка длины1" [длина2 байта] "строка длины2"

Можно использовать несколько фрагментов, даже если общая длина меньше 255.

Обязательно укажите длину байтов в расчете rdlen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...