我正在解析以TinyDNS格式(djbdns)编写的DNS区域文件,但在解码SRV记录时遇到问题。
到目前为止,我已经能够正确解析SRV记录中的所有内容,但下面的答案包含一组优先级,权重和端口的八进制数字(SRV DNS记录的正常值),可以作为一个示例。由here
生成:_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个图表到字符串的末尾是提供服务的目标主机。因此,解析目标很容易,字符串之前的每个八进制集都是期望的字符数,并且正在删除句点。
Priority,Weight和Port接受0到65535之间的值,该值将这些值转换为2组255,即\ 000 \ 144 = 10个十进制,但如果数字大于256位,则使用第二组,即\ 023 \ 304 = 5060此时,我被阻止了,我不知道他们在做什么,单独转换或组合转换每个集合都没有给我正确的十进制数字。我知道我很近,但是被超级封锁了。我正在使用默认的int方法将八进制转换为dec,这很容易。
octal = '144'
dec = int(octal, 8)
我解析完之后应该是这样的(显然空格是我在代码中为连接值所做的事情。
10 100 5060 pbx.example.com
任何指导或提示的人将不胜感激!
答案 0 :(得分:1)
将\ 023 \ 304视为高低部分。 您需要将高位移位。
>>> high = '023'
>>> low = '304'
>>> high_dec = int(high, 8)
>>> low_dec = int(low, 8)
>>> (high_dec << 8) + low_dec
5060