C 在TXT或SPF记录中写入超过255个字符的数据

C 在TXT或SPF记录中写入超过255个字符的数据,c,dns,rfc1035,C,Dns,Rfc1035,在从头开始发送DNS消息的同时,我可以使用此伪C代码发送多达255个字符的TXT记录: 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]; } 对于336个字符的长字符串,它应该是:[255][chars0:255]+[81][255:还是,[336][chars

在从头开始发送DNS消息的同时,我可以使用此伪C代码发送多达255个字符的TXT记录:

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];
}
对于336个字符的长字符串,它应该是:
[255][chars0:255]+[81][255:
还是,
[336][chars]
,或者是我遗漏的其他明显内容


我们可以使用TXT/SPF记录字符,但单个字符串中不能超过255个字符。寻找关于如何编写长记录(多个字符串)的指针,以便我可以通过底层套接字发送它。谢谢

您不能返回长度超过255字节的文本片段。DNS格式不允许使用这些字节

SPF允许将记录拆分为片段。根据我们的说法,可以在任何位置拆分字符串,因为片段边界在语法上并不重要,大多数人都会在子句之间拆分,但不需要这样做

当返回多个文本片段时,只需将它们连接起来,就像对域名所做的一样。RFC在剪切签名“v=spf1”的拆分时保持沉默,因此第一个段的长度不小于7字节

[长度1字节]“长度字符串1”[长度2字节]“长度字符串2”

即使总长度小于255,也可以使用多个片段


请确保在计算
rdlen

时包含长度字节。此代码实际上与DNS相关的任何内容都不对应。你的DNS包结构在哪里?在内部完成此操作的方法是使用DNS数据指针,这是一种将一个字符串链接到另一个字符串的方法。每个字符串都有一个无符号字节长度标识符,这就是限制。谢谢Jasen!我不确定我问这个问题的方式是否“正确”,你似乎对DNS很了解!再次感谢!:)
   |###[ 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