我一直在尝试使用 Twisted 实现自定义 APL 记录查询来创建 DNS 服务器。
我已经创建了一个自定义记录类来实现
IEncodableRecord
来对 APL 记录进行编码、解码和字符串化。我还在处理 APL 记录 (42) 的查询类型并返回响应。当我使用像dig
这样的dig -p [port] @127.0.0.1 [domain] APL
命令时,我得到一个错误消息末尾有x个额外的字节。
dig
命令返回如下内容:
;; Warning: Message parser reports malformed message packet.
; <<>> DiG 9.16.39 <<>> -p [port] @127.0.0.1 [domain] APL
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47319
;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: Message has 4 extra bytes at end
;; QUESTION SECTION:
;[domain]. IN APL
;; Query time: 4886 msec
;; SERVER: [server + port]
;; WHEN: [datetime]
;; MSG SIZE rcvd: 45
此代码生成要发回的答案:
address = b"172.0.2.100" #Just a dummy response address.
payload: apl.IEncodableRecord = dns.Record_APL(address=address)
answer = dns.RRHeader(
type=dns.APL,
name=name,
ttl=0,
cls=dns.IN, # IN
payload=payload,
)
answers = [answer]
authority = []
additional = []
print('Answers:')
print(answers)
return answers, authority, additional
我从服务器返回的答案是这样的:
<RR name=[domain] type=APL class=IN ttl=0s auth=False>
我对服务器中 RRHeader 的有效负载看起来像这样:
<APL afi=1 address=172.0.2.100 prefix=23 ttl=0> #All this info is just dummy data I return at the moment.
我不认为有效负载是问题所在?
我该如何调试它,或者是否有一些在线资源(我找不到)可以为我指明正确的方向?