首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Erlang中构建DNS查询记录?

问如何在Erlang中构建DNS查询记录?
EN

Stack Overflow用户
提问于 2009-11-16 13:47:57
回答 3查看 1.8K关注 0票数 6

我正在构建一个原生Bonjour / Zeroconf库,需要构建DNS查询记录以广播到其他机器。我曾尝试查看过Erlang源代码,但由于我对Erlang比较陌生,所以它在所有inet_XXX.erl和.hrl文件中的内容都比较密集。我有一个用于接收和解析DNS记录有效负载的侦听器,我只是不知道如何创建查询记录。我真正需要知道的是,为了得到可以发送的二进制文件,我需要将哪些内容传递给inet_dns:encode()。这就是我想要做的。

代码语言:javascript
复制
{ok,P} = inet_dns:encode(#dns_query{domain="_daap._tcp.local",type=ptr,class=in})

下面是我得到的错误

代码语言:javascript
复制
10> test:send().
** exception error: {badrecord,dns_rec}
     in function  inet_dns:encode/1
     in call from test:send/0
11> 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-17 05:39:06

我终于想通了。

代码语言:javascript
复制
send(Domain) ->
    {ok,S} = gen_udp:open(5555,[{reuseaddr,true}, {ip,{224,0,0,251}}, {multicast_ttl,4}, {multicast_loop,false}, {broadcast,true}, binary]),
    P = #dns_rec{header=#dns_header{},qdlist=[#dns_query{domain=Domain,type=ptr,class=in}]},
    gen_udp:send(S,{224,0,0,251},5353,inet_dns:encode(P)),
    gen_udp:close(S).
票数 4
EN

Stack Overflow用户

发布于 2009-11-17 04:58:16

事实上,没有关于inet_dns模块的文档,这应该使您在代码中使用它时非常谨慎。我希望你充分意识到,如果他们( OTP团队)想要改变模块的实现和使用方式,就不会考虑你的项目。

阅读实现思想的代码,或者直接开始根据DNS协议上的RFC使用Erlang位语法创建DNS协议消息。创建DNS包要比解析它容易得多(我自己也经历过这种情况,最小化数据包大小的“小窍门”似乎不值得这么做)。

票数 1
EN

Stack Overflow用户

发布于 2009-11-17 06:31:25

正如Magnus在Erlang问题邮件列表中所解释的那样:

http://groups.google.com/group/erlang-programming/browse_thread/thread/ce547dab981219df/47c3ca96b15092e0?show_docid=47c3ca96b15092e0

您在encode/1函数中传递的是dns_query而不是dns_rec记录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1740297

复制
相关文章

相似问题

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