记录update TLSA时遇到的字节错位和delete 问题

记录一下自己在使用dnspython来update TLSA时遇到的问题

1。在填充好TLSA对象,update对象后,打印update对象,发现报文正确,但是使用tcp发送后查询新添加的记录发现字节错位了,如

待添加记录为:_443._tcp.www.test.com  IN TLSA 1 2 3 XXXX 

添加成功后查询该记录得到

 _443._tcp.www.test.com IN TLSA 0  1 0  0203XXXX

很奇怪的是发生了字节错位,一开始是怀疑不会是bind9不遵守RFC吧?后来想想可能性几乎为0。。。。

然后又试图通过截取报文,验证是否是自己发送的报文存在问题,最后发现问题出现在dns.query.tcp()处

使用pdb调试后未发现问题,只知道最后是由于to_wire()函数导致,从Update.to_wire()到Message.to_wire(),然后又追踪到到Render.get_wire()(发现这个函数是打印报文头的) 最后不知道怎么调用了TLSA.to_wire函数

好吧……嗯。。。。反正最后问题是通过我更新dnspython的编译莫名其妙的解决了,似乎是没什么借鉴意义……

2 。 有关delete时候的rdataclass问题

在TLSA delete 时,打印update对象发现构造update时指定的dns.rdataclass.IN 变成了NONE 虽然未影响最后update结果,但是还是不太明白为什么要这么做。

我传入delete函数的参数是 TLSA对象,

  149	          args = list(args)
  150             if isinstance(args[0], dns.rdata.Rdata):#返回值True,进入该分支
  151                 for rd in args:
  152                     self._add_rr(name, 0, rd, dns.rdataclass.NONE)#设置rdataclass 为NONE,
  153             else:#如果是依次传入的args
  154                 rdtype = args.pop(0) #pop出RR TYPE
  155                 if isinstance(rdtype, (str, unicode)):
  156                     rdtype = dns.rdatatype.from_text(rdtype)#如果是type字符串表示,则转化成相应Type的对象
  157                 if len(args) == 0:
  158                     rrset = self.find_rrset(self.authority, name,
  159                                             self.zone_rdclass, rdtype,
  160                                             dns.rdatatype.NONE,
  161                                             dns.rdataclass.ANY, 
  162                                             True, True)
  163                 else:
  164                     for s in args:
  165                         rd = dns.rdata.from_text(self.zone_rdclass, rdtype, s,
  166                                                  self.origin)#生成TLSA 对象
  167                         self._add_rr(name, 0, rd, dns.rdataclass.NONE)#还是设置成NONE?

为啥呢?难道删除的时候不用匹配rdataclass吗?





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值