return dnsMessage; DNSMessage message = new DNSMessage(); message.setQuestions(new Question[]{q}); message.setRecursionDesired(true); message.setId(random.nextInt()); byte[] buf = message.toArray(); try (DatagramSocket socket = new DatagramSocket()) { DatagramPacket packet = new DatagramPacket(buf, buf.length, packet = new DatagramPacket(new byte[bufferSize], bufferSize); socket.receive(packet); dnsMessage = DNSMessage.parse(packet.getData()); if (dnsMessage.getId() != message.getId()) { return null; for (Record record : dnsMessage.getAnswers()) { if (record.isAnswer(q)) { if (cache != null) {
void recurse(InetAddress address, DNSMessage query) throws LoopDetected, MaxIterativeStepsReached { Question question = query.getQuestion(); if (!map.containsKey(address)) { map.put(address, new HashSet<Question>()); } else if (map.get(address).contains(question)) { throw new IterativeClientException.LoopDetected(); } if (++steps > recursiveDnsClient.maxSteps) { throw new IterativeClientException.MaxIterativeStepsReached(); } boolean isNew = map.get(address).add(question); assert(isNew); }
@Override public synchronized DNSMessage get(Question q) { DNSMessage message = backend.get(q); if (message == null) { missCount++; return null; } long ttl = maxTTL; for (Record r : message.getAnswers()) { ttl = Math.min(ttl, r.ttl); } for (Record r : message.getAdditionalResourceRecords()) { ttl = Math.min(ttl, r.ttl); } if (message.getReceiveTimestamp() + ttl > System.currentTimeMillis()) { missCount++; expireCount++; backend.remove(q); return null; } else { hitCount++; return message; } }
return resMessage; List<Record> authorities = resMessage.copyAuthority(); final Question question = q.getQuestion(); DNSName name = ((NS) record.payloadData).name;
response = new DNSMessage(byteBuffer.array()); } catch (IOException e) { abortTcpRequestAndCleanup(socketChannel, "Exception creating DNS message form socket channel bytes", e);
continue; if (message.getResponseCode() != DNSMessage.RESPONSE_CODE.NO_ERROR) { continue; for (Record record: message.getAnswers()) { if (record.isAnswer(q)) { return message;
@IntegrationTest public static void testTcpAnswer() throws IOException { DNSClient client = new DNSClient(new LRUCache(1024)); client.setAskForDnssec(true); client.setDisableResultFilter(true); DNSMessage result = client.query("www-nsec.example.com", Record.TYPE.A); assertNotNull(result); assertTrue(result.toArray().length > 512); } }
private void ensureWriteBufferIsInitialized() { if (writeBuffer != null) { if (!writeBuffer.hasRemaining()) { writeBuffer.rewind(); } return; } writeBuffer = request.getInByteBuffer(); }
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(); } }
@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; } }
List<Record<? extends Data>> authorities = resMessage.copyAuthority(); final Question question = q.getQuestion(); DNSName name = ((NS) record.payloadData).name;
response = new DNSMessage(byteBuffer.array()); } catch (IOException e) { abortUdpRequestAndCleanup(datagramChannel, "Exception constructing dns message from datagram channel", e);
void recurse(InetAddress address, DNSMessage query) throws LoopDetected, MaxRecursionStepsReached { Question question = query.getQuestion(); if (!map.containsKey(address)) { map.put(address, new HashSet<Question>()); } else if (map.get(address).contains(question)) { throw new RecursiveClientException.LoopDetected(); } if (++steps > recursiveDnsClient.maxSteps) { throw new RecursiveClientException.MaxRecursionStepsReached(); } boolean isNew = map.get(address).add(question); assert(isNew); }
ByteArrayInputStream bis = new ByteArrayInputStream(data); DataInputStream dis = new DataInputStream(bis); DNSMessage message = new DNSMessage(); message.id = dis.readUnsignedShort(); int header = dis.readUnsignedShort();
private DNSMessage queryRecursive(ResolutionState resolutionState, DNSMessage q) throws IOException { InetAddress primaryTarget = null, secondaryTarget = null; Question question = q.getQuestion(); DNSName parent = question.name.getParent();