我可以使用Netty检索DNS TXT数据吗?例如。使用DnsNameResolver?

时间:2017-10-10 19:54:55

标签: netty

看起来我能够获得DNS查询,但我在答案中看不到任何内容。

final DnsNameResolver resolver = new 
DnsNameResolverBuilder(EVENT_LOOP_GROUP.next())
            .channelType(NioDatagramChannel.class)
            .queryTimeoutMillis(Duration.ofSeconds(dnsTimeoutSeconds).plusMillis(dnsTimeoutMilliseconds).toMillis())
            .recursionDesired(true)
            .build();
    try {
        final AddressedEnvelope<DnsResponse, InetSocketAddress> result =
                resolver
                        .query(new DefaultDnsQuestion(host, DnsRecordType.TXT))
                        .get();
...

1 个答案:

答案 0 :(得分:1)

  

我可以使用Netty检索DNS TXT数据吗?例如。使用DnsNameResolver?

是的,你可以。

你所做的并不错,但缺少某些部分。 AddressedEnvelope是邮件,发件人和收件人地址的容器。您只需要从AddressedEnvelope获取消息,然后在DnsMessage中查找答案。

private static String resolveTxt(String dnsRecord) throws InterruptedException, ExecutionException {
    DnsMessage message = resolver.query(new DefaultDnsQuestion(dnsRecord, DnsRecordType.TXT)).get().content();
    if(message.count(DnsSection.ANSWER) > 0) {
        DefaultDnsRawRecord record = message.recordAt(DnsSection.ANSWER, 0);
        return DefaultDnsRecordDecoder.decodeName(record.content());
    }
    return null;
}