首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将dnspython dns.resolver.Answer对象转换为原始字节回复

将dnspython dns.resolver.Answer对象转换为原始字节回复
EN

Stack Overflow用户
提问于 2020-12-01 01:13:58
回答 1查看 400关注 0票数 0

我使用dnspython向DNS服务器发出查询并获得响应;我的响应以dns.resolver.Answer对象的形式出现。我想使用python套接字将此DNS回复转发到其他位置,为此,我需要此消息的原始格式,如下所示:

代码语言:javascript
运行
复制
b'\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x10googletagmanager\x03com\x00\x00\x01\x00\x01'

我使用了文档和.__dict__,发现dns.resolver.Answer包含:

代码语言:javascript
运行
复制
{'qname': <DNS name www.example.com.>, 'rdtype': <RdataType.A: 1>, 'rdclass': <RdataClass.IN: 1>, 'response': <DNS message, ID 1111>, 'nameserver': '8.8.8.8', 'port': 53, 'canonical_name': <DNS name www.example.com.>, 'rrset': <DNS www.example.com. IN A RRset: [<0.0.0.0>]>, 'expiration': 0000}

不幸的是,没有DNS响应的原始字节消息。如何使用其他库将dns.resolver.Answer转换为原始字节对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-01 07:09:58

dns.resolver.Answer是建立在接收到的dns.resolver.Message上的,它确实有一个to_wire

如果查看https://www.dnspython.org/docs/1.16.0/dns.resolver-pysrc.html#Resolver.query的末尾,就会看到Answer对象是如何从Message中计算出来的。但是查看https://www.dnspython.org/docs/1.16.0/dns.resolver-pysrc.html#Answer.__init__中的init,您可以看到它保留了原始的Message (您需要访问消息的头部分,作为标志可用,等等)。

因此,快速演示如下:

代码语言:javascript
运行
复制
In [2]: import dns

In [3]: import dns.resolver

In [4]: ans = dns.resolver.query('www.example.com')

In [5]: print ans
<dns.resolver.Answer object at 0x10b2b0d10>

In [6]: print ans.response
id 21075
opcode QUERY
rcode NOERROR
flags QR RD RA
;QUESTION
www.example.com. IN A
;ANSWER
www.example.com. 37157 IN A 93.184.216.34
;AUTHORITY
;ADDITIONAL

In [7]: print type(ans.response)
<class 'dns.message.Message'>

In [8]: print ans.response.to_wire()
RS��wwwexamplecom�
                  �%]��"

In [17]: print repr(ans.response.to_wire())
'RS\x81\x80\x00\x01\x00\x01\x00\x00\x00\x00\x03www\x07example\x03com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x91%\x00\x04]\xb8\xd8"'

In [18]: r = ans.response.to_wire()

In [19]: message = dns.message.from_wire(r)

In [20]: print message
id 21075
opcode QUERY
rcode NOERROR
flags QR RD RA
;QUESTION
www.example.com. IN A
;ANSWER
www.example.com. 37157 IN A 93.184.216.34
;AUTHORITY
;ADDITIONAL
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65078092

复制
相关文章

相似问题

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