使用python解析以djbdns格式创建的SRV DNS记录

使用python解析以djbdns格式创建的SRV DNS记录,python,bash,parsing,dns,Python,Bash,Parsing,Dns,我正在解析一个以TinyDNS格式(djbdns)编写的DNS区域文件,在解码SRV记录时遇到问题 到目前为止,我能够正确解析SRV记录中的所有内容,但下面包含一组优先级、权重和端口的八进制数(SRV DNS记录的正常值)的答案就是一个可以从 :_sip._tcp.example.com:33:\000\012\000\144\023\304\003pbx\007example\003com\000:86400 我遇到的问题是DNS答案: \000\012\000\144\023\304\00

我正在解析一个以TinyDNS格式(djbdns)编写的DNS区域文件,在解码SRV记录时遇到问题

到目前为止,我能够正确解析SRV记录中的所有内容,但下面包含一组优先级、权重和端口的八进制数(SRV DNS记录的正常值)的答案就是一个可以从

:_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,即\000\144=10十进制,但如果数字超过256位,则使用第二组,即\023\304=5060。此时,我被阻止,我不知道它们在做什么,单独或一起转换每个集合并不能给我正确的十进制数。我知道我很接近,但被超级封锁了。我使用默认的int方法将八进制转换为十进制,这相当容易

octall='144'
十进制=整数(八进制,8)
在我解析它之后,它应该是这样的(很明显,空格是我在代码中为concat值所做的事情)

10 100 5060 pbx.example.com

任何指导或提示都将不胜感激!

将\023\304视为高低部分。 你需要把高的部分移位

>>> high = '023'
>>> low = '304'
>>> high_dec = int(high, 8)
>>> low_dec = int(low, 8)
>>> (high_dec << 8) + low_dec
5060
>高='023'
>>>低='304'
>>>高_dec=int(高,8)
>>>低_dec=int(低,8)

>>>(圣母玛利亚!!!高潮和低谷!这是对的人!谢谢你的帮助我被封锁了好几天。不客气。每当我看到八进制数的组合时,总是会想起位移。如果你对答案感到满意,如果你能接受,我将不胜感激。尝试在这里建立一些声誉!:)谢谢。