我正在解析一个用TinyDNS格式(djbdns)编写的DNS区域文件,在解码SRV记录时遇到了问题。
到目前为止,我能够正确地解析SRV记录中的所有内容,但是下面的答案包含了优先级、权重和端口( 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 i.e \000\144 = 10小数点,但是如果数字大于256位,那么它使用第二组I \023\304 = 5060,此时我不知道它们在做什么,单独或一起转换每组都不能给出正确的十进制数。我知道我离得很近,但被封锁得很厉害。我使用默认的int方法将八进制转换为dec,这相当容易。
octal = '144'
dec = int(octal, 8)在我解析它之后,应该是这样的(很明显,空格是我在代码中用来连接值的东西。
10 100 5060 pbx.example.com任何指导或暗示的人将不胜感激!
发布于 2019-05-10 18:08:42
想象一下\023\304是高部分和低部分。你需要改变高的部分。
>>> high = '023'
>>> low = '304'
>>> high_dec = int(high, 8)
>>> low_dec = int(low, 8)
>>> (high_dec << 8) + low_dec
5060https://stackoverflow.com/questions/56082156
复制相似问题