首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析使用python以djbdns格式创建的SRV DNS记录。

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

Stack Overflow用户
提问于 2019-05-10 17:17:44
回答 1查看 263关注 0票数 0

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

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

代码语言:javascript
复制
:_sip._tcp.example.com:33:\000\012\000\144\023\304\003pbx\007example\003com\000:86400

我遇到问题的部分是DNS的答案:

代码语言:javascript
复制
\000\012\000\144\023\304\003pbx\007example\003com\000

头24个字符

代码语言:javascript
复制
\000\012\000\144\023\304

其余的炭

代码语言:javascript
复制
\003pbx\007example\003com\000

前24个字符包含DNS将使用的服务的优先级、权重和端口,从第24个图表到字符串末尾是提供服务的目标主机。因此,解析目标很容易,字符串之前的每一个八进制集都是在句点之间期望的字符数,并且正在移除句点。

优先级、权重和端口接受0- 65535的值,它将值转换为2组255 i.e \000\144 = 10小数点,但是如果数字大于256位,那么它使用第二组I \023\304 = 5060,此时我不知道它们在做什么,单独或一起转换每组都不能给出正确的十进制数。我知道我离得很近,但被封锁得很厉害。我使用默认的int方法将八进制转换为dec,这相当容易。

代码语言:javascript
复制
octal = '144'
dec   = int(octal, 8)

在我解析它之后,应该是这样的(很明显,空格是我在代码中用来连接值的东西。

代码语言:javascript
复制
10 100 5060 pbx.example.com

任何指导或暗示的人将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-10 18:08:42

想象一下\023\304是高部分和低部分。你需要改变高的部分。

代码语言:javascript
复制
>>> high = '023'
>>> low = '304'
>>> high_dec = int(high, 8)
>>> low_dec = int(low, 8)
>>> (high_dec << 8) + low_dec
5060
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56082156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档