2017-10-10 10 views
0

Il semble que je puisse obtenir des recherches DNS, mais je ne vois rien dans la réponse.Puis-je utiliser Netty pour récupérer les données DNS TXT? par exemple. utilisant DnsNameResolver?

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(); 
... 

Répondre

1

Puis-je utiliser Netty pour récupérer des données DNS TXT? par exemple. utilisant DnsNameResolver?

Oui, vous pouvez.

Ce que vous avez fait n'est pas faux mais certaines parties sont manquantes. Un AddressedEnvelope est un conteneur pour un message, un expéditeur et une adresse de destinataire. Vous avez seulement besoin d'obtenir le message du AddressedEnvelope et ensuite chercher des réponses dans le 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; 
}