/** * Query the system nameservers for a single entry of the class IN * (which is used for MX, SRV, A, AAAA and most other RRs). * * @param name The DNS name to request. * @param type The DNS type to request (SRV, A, AAAA, ...). * @return The response (or null on timeout/error). */ public DNSMessage query(String name, TYPE type) { Question q = new Question(name, type, CLASS.IN); return query(q); }
/** * Check if this record answers a given query. * @param q The query. * @return True if this record is a valid answer. */ public boolean isAnswer(Question q) { return ((q.getType() == type) || (q.getType() == TYPE.ANY)) && ((q.getClazz() == clazz) || (q.getClazz() == CLASS.ANY)) && (q.getName().equals(name)); }
ResolverResult(Question question , DNSMessage answer, Set<UnverifiedReason> unverifiedReasons) throws NullResultException { if (answer == null) { throw new MiniDNSException.NullResultException(question.asMessageBuilder().build()); } this.question = question; this.responseCode = answer.responseCode; Set<D> r = answer.getAnswersFor(question); if (r == null) { this.data = Collections.emptySet(); } else { this.data = Collections.unmodifiableSet(r); } if (unverifiedReasons == null) { this.unverifiedReasons = null; isAuthenticData = false; } else { this.unverifiedReasons = Collections.unmodifiableSet(unverifiedReasons); isAuthenticData = this.unverifiedReasons.isEmpty(); } }
message.questions = new Question[questionCount]; while (questionCount-- > 0) { Question q = Question.parse(dis, data); message.questions[questionCount] = q;
/** * Query a nameserver for a single entry. * @param name The DNS name to request. * @param type The DNS type to request (SRV, A, AAAA, ...). * @param clazz The class of the request (usually IN for Internet). * @param host The DNS server host. * @return The response (or null on timeout / failure). * @throws IOException On IO Errors. */ public DNSMessage query(String name, TYPE type, CLASS clazz, String host) throws IOException { Question q = new Question(name, type, clazz); return query(q, host); }
/** * Query a nameserver for a single entry. * @param name The DNS name to request. * @param type The DNS type to request (SRV, A, AAAA, ...). * @param clazz The class of the request (usually IN for Internet). * @param host The DNS server host. * @param port The DNS server port. * @return The response (or null on timeout / failure). * @throws IOException On IO Errors. */ public DNSMessage query(String name, TYPE type, CLASS clazz, String host, int port) throws IOException { Question q = new Question(name, type, clazz); return query(q, host, port); }
/** * Query the system nameservers for a single entry of any class. * * This can be used to determine the name server version, if name * is version.bind, type is TYPE.TXT and clazz is CLASS.CH. * * @param name The DNS name to request. * @param type The DNS type to request (SRV, A, AAAA, ...). * @param clazz The class of the request (usually IN for Internet). * @return The response (or null on timeout/error). */ public DNSMessage query(String name, TYPE type, CLASS clazz) { Question q = new Question(name, type, clazz); return query(q); }
public final <D extends Data> ResolverResult<D> resolve(DNSName name, Class<D> type) throws IOException { TYPE t = TYPE.getType(type); Question q = new Question(name, t); return resolve(q); }
/** * Parse a byte array and rebuild the dns question from it. * @param dis The input stream. * @param data The plain data (for dns name references). * @return The parsed dns question. * @throws IOException On errors (read outside of packet). */ public static Question parse(DataInputStream dis, byte[] data) throws IOException { String name = NameUtil.parse(dis, data); TYPE type = TYPE.getType(dis.readUnsignedShort()); CLASS clazz = CLASS.getClass(dis.readUnsignedShort()); return new Question (name, type, clazz); }
/** * Resolve the given name and type which is expected to yield DNSSEC authenticated results. * * @param name the DNS name to resolve. * @param type the class of the RR type to resolve. * @param <D> the RR type to resolve. * @return the resolver result. * @throws IOException in case an exception happens while resolving. * @see #resolveDnssecReliable(Question) */ public <D extends Data> ResolverResult<D> resolveDnssecReliable(DNSName name, Class<D> type) throws IOException { TYPE t = TYPE.getType(type); Question q = new Question(name, t); return resolveDnssecReliable(q); }
Question question = new Question(name, TYPE.A); final DNSMessage query = getQueryFor(question); DNSMessage aMessage = queryRecursive(resolutionState, query); Question question = new Question(name, TYPE.AAAA); final DNSMessage query = getQueryFor(question); DNSMessage aMessage = queryRecursive(resolutionState, query);
Question question = new Question(name, TYPE.A); final DNSMessage query = getQueryFor(question); DNSMessage aMessage = queryRecursive(recursionState, query); Question question = new Question(name, TYPE.AAAA); final DNSMessage query = getQueryFor(question); DNSMessage aMessage = queryRecursive(recursionState, query);
@IntegrationTest public static NSID testNsidLRoot() { DNSClient client = new DNSClient(null) { @Override protected Builder newQuestion(Builder message) { message.getEdnsBuilder().addEdnsOption(NSID.REQUEST); return super.newQuestion(message); } }; DNSMessage response = null; Question q = new Question("de", TYPE.NS); for (InetAddress lRoot : IterativeDNSClient.getRootServer('l')) { try { response = client.query(q, lRoot); } catch (IOException e) { continue; } break; } NSID nsid = response.getEdns().getEdnsOption(OptionCode.NSID); assertNotNull(nsid); return nsid; } }