/** * Attempts to resolve an SMTP server address, given the destination e-mail address. * * @param email The e-mail address used for the lookup. * @return An optional, potentially containing */ protected Optional<String> resolve(String email) { Optional<String> domainOptional = extractDomain(email); if (!domainOptional.isPresent()) { return Optional.empty(); } String mailDomain = domainOptional.get(); try { Lookup dnsLookup = new Lookup(mailDomain, Type.MX); List<Record> records = Arrays.asList(dnsLookup.run()); if (records.isEmpty()) { return Optional.empty(); } return chooseBestRecord(records); } catch (TextParseException e) { e.printStackTrace(); } return Optional.empty(); }
@Before public void beforeConsoleCrossDcServerTest(){ crossDcClusterServer = new ConsoleCrossDcServer(){ @Override protected List<String> lookUpCname(String domain) throws TextParseException { return cnames; } }; crossDcClusterServer.setConsoleConfig(consoleConfig); crossDcClusterServer.setCheckIntervalMilli(checkIntervalMilli); cnames.add("cname1"); HashMap<String, String> cnameToDc = new HashMap<>(); cnameToDc.put("cname1", "jq"); cnameToDc.put("cname2", "oy"); DefaultFoundationService.setDataCenter("jq"); when(consoleConfig.getConsoleDomain()).thenReturn("xpipe"); when(consoleConfig.getConsoleCnameToDc()).thenReturn(cnameToDc); }
@Override public List<SRVRecord> lookupSRVRecords(String name) throws TextParseException { List<SRVRecord> res = new ArrayList<SRVRecord>(); Lookup lookup = new Lookup(name, Type.SRV); Record[] recs = lookup.run(); if (recs == null) return res; for (Record record : recs) { org.xbill.DNS.SRVRecord srvRecord = (org.xbill.DNS.SRVRecord) record; if (srvRecord != null && srvRecord.getTarget() != null) { String host = srvRecord.getTarget().toString(); int port = srvRecord.getPort(); int priority = srvRecord.getPriority(); int weight = srvRecord.getWeight(); SRVRecord r = new SRVRecord(host, port, priority, weight); res.add(r); } } return res; }
/** * resolves an A record by its name using a specified DNS host and port * * @param resolverHost name server hostname or IP address * @param resolverPort name server port * @param name the DNS name of the A record - the name to resolve * @return a comma separated list of IP addresses or an empty string when unable to resolve */ public String resolveHostByName(String resolverHost, int resolverPort, String name) { try { SimpleResolver resolver = new SimpleResolver(resolverHost); resolver.setPort(resolverPort); Lookup lookup = new Lookup(name, A); Record[] records = lookup.run(); if (records != null) { List<String> addresses = of(records) .filter(it -> it instanceof ARecord) .map(it -> ((ARecord) it).getAddress().getHostAddress()) .collect(toList()); return collectionToCommaDelimitedString(addresses); } else { return ""; } } catch (UnknownHostException | TextParseException e) { log.warn("unable to resolve using A record " + name, e); return ""; } }
/** * resolves the TXT field for a given name using a specified DNS host and port. This is useful, for example, * if you want to resolve abusers with: <a href="https://abusix.com/contactdb.html">https://abusix.com/contactdb.html</a> * * @param resolverHost name server hostname or IP address * @param resolverPort name server port * @param name the DNS name of the TXT record - the name to resolve * @return the resolved text */ public String resolveTextByName(String resolverHost, int resolverPort, String name) { try { SimpleResolver resolver = new SimpleResolver(resolverHost); resolver.setPort(resolverPort); Lookup lookup = new Lookup(name, TXT); Record[] records = lookup.run(); if (records != null) { List<String> addresses = of(records) .filter(it -> it instanceof TXTRecord) .map(it -> collectionToCommaDelimitedString(((TXTRecord) it).getStrings())) .collect(toList()); return collectionToCommaDelimitedString(addresses); } else { return ""; } } catch (UnknownHostException | TextParseException e) { log.warn("unable to resolve using TXT record " + name, e); return ""; } }
private String resolveSrvByName(Resolver resolver, String name) { try { Lookup lookup = new Lookup(name, SRV); if (resolver != null) { lookup.setResolver(resolver); } Record[] records = lookup.run(); if (records == null) { return null; } return of(records) .filter(it -> it instanceof SRVRecord) .map(srv -> resolveHostByName(resolver, ((SRVRecord) srv).getTarget()) + ":" + ((SRVRecord) srv).getPort()) .distinct() .collect(joining(",")); } catch (TextParseException e) { log.warn("unable to resolve using SRV record " + name, e); return null; } }
@Test public void testCompareSamePriorityWeightAndDifferentHost () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host1.com.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host2.com.", 1800, 0, 10, 3600 ) ); ServiceRecord svc3 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host3.com.", 1800, 0, 10, 3600 ) ); TextRecord txt1 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt2 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt3 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); ServiceInstance svcInst1 = new ServiceInstance( serviceTypeCoap, svc1, txt1 ); ServiceInstance svcInst2 = new ServiceInstance( serviceTypeCoap, svc2, txt2 ); ServiceInstance svcInst3 = new ServiceInstance( serviceTypeCoap, svc3, txt3 ); List<ServiceInstance> list = new ArrayList<ServiceInstance>( 3 ); list.add( svcInst2 ); list.add( svcInst3 ); list.add( svcInst1 ); Collections.sort( list ); Assert.assertTrue( "First element in the list should be svcInst1", list.get( 0 ).equals( svcInst1 ) ); Assert.assertTrue( "Second element in the list should be svcInst2", list.get( 1 ).equals( svcInst2 ) ); Assert.assertTrue( "Third element in the list should be svcInst3", list.get( 2 ).equals( svcInst3 ) ); }
@Test public void testCompareSamePriorityWeightHostAndDifferentPort () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1801, 0, 10, 3600 ) ); ServiceRecord svc3 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1802, 0, 10, 3600 ) ); TextRecord txt1 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt2 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt3 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); ServiceInstance svcInst1 = new ServiceInstance( serviceTypeCoap, svc1, txt1 ); ServiceInstance svcInst2 = new ServiceInstance( serviceTypeCoap, svc2, txt2 ); ServiceInstance svcInst3 = new ServiceInstance( serviceTypeCoap, svc3, txt3 ); List<ServiceInstance> list = new ArrayList<ServiceInstance>( 3 ); list.add( svcInst2 ); list.add( svcInst3 ); list.add( svcInst1 ); Collections.sort( list ); Assert.assertTrue( "First element in the list should be svcInst1", list.get( 0 ).equals( svcInst1 ) ); Assert.assertTrue( "Second element in the list should be svcInst2", list.get( 1 ).equals( svcInst2 ) ); Assert.assertTrue( "Third element in the list should be svcInst3", list.get( 2 ).equals( svcInst3 ) ); }
@Test public void testDnsJavaWithDnsServer() throws TextParseException, UnknownHostException { final Lookup l = new Lookup("example.com", Type.AAAA); final SimpleResolver resolver = new SimpleResolver("::1"); resolver.setPort(9153); l.setResolver(resolver); l.run(); System.out.println("result: " + l.getResult()); final Record[] answers = l.getAnswers(); assertEquals(answers.length, 1); final Record record = answers[0]; System.err.println(record.getTTL()); if(l.getResult() == Lookup.SUCCESSFUL) { System.out.println(l.getAnswers()[0].rdataToString()); } assertTrue(l.getResult() == Lookup.SUCCESSFUL); }
public static List<ForwardLookupResult> getARecord(String hostName, String domainName) throws TextParseException { List<ForwardLookupResult> entries = null; if (hostName != null && !hostName.isEmpty() && domainName != null && !domainName.isEmpty()) { Record[] recs = new Lookup(hostName, Type.A).run(); if (recs != null) { if (recs.length > 0) { entries = new ArrayList<>(); for (Record record : recs) { ForwardLookupResult foundSubDomain = new ForwardLookupResult(domainName); foundSubDomain.setHostName(hostName); String ipAddress = ((ARecord) record).getAddress().getHostAddress(); foundSubDomain.setIpAddress(ipAddress); foundSubDomain.setLookupType("A"); entries.add(foundSubDomain); } } } } return entries; }
public static List<ForwardLookupResult> getAAAARecord(String hostName, String domainName) throws TextParseException { List<ForwardLookupResult> entries = null; if (hostName != null && !hostName.isEmpty() && domainName != null && !domainName.isEmpty()) { Record[] recs = new Lookup(hostName, Type.AAAA).run(); if (recs != null) { if (recs.length > 0) { entries = new ArrayList<>(); for (Record record : recs) { ForwardLookupResult foundSubDomain = new ForwardLookupResult(domainName); foundSubDomain.setHostName(hostName); String ipAddress = ((AAAARecord) record).getAddress().getHostAddress(); foundSubDomain.setIpAddress(ipAddress); foundSubDomain.setLookupType("A"); entries.add(foundSubDomain); } } } } return entries; }
@Override public void addHostFromUrl(String url, String baseUrl) { try { URL aUrl = new URL(url); URL sUrl = new URL(baseUrl); String domain = NetworkTools.getDomainFromHost(aUrl.getHost()); YileResult res = new YileResult(domain); res.setHostName(aUrl.getHost()); res.setSource(sUrl.getHost()); res.setUrl(url); try { String name = domain.split("\\.", 2)[0]; String tld = domain.split("\\.", 2)[1]; res.setRegistrant(NetworkTools.getHostNameWhoisResult(name, tld, true)); res.setIPAddress(NetworkTools.getIpFromHost(aUrl.getHost()).get(0)); } catch (TextParseException tpe) { Logger.getLogger("yileController.yileWorker.addHostFromUrl").log(Level.SEVERE, null, tpe); } addResult(res); } catch (MalformedURLException ex) { Logger.getLogger("yileController.yileWorker.addHostFromUrl").log(Level.SEVERE, null, ex); } }
public static List<ARecordResult> getARecord(String hostName) throws TextParseException { List<ARecordResult> entries = null; Record[] recs = new Lookup(hostName, Type.A).run(); if (recs != null) { if (recs.length > 0) { entries = new ArrayList<>(); for (Record record : recs) { ARecordResult foundSubDomain = new ARecordResult(NetworkTools.getDomainFromHost(hostName)); foundSubDomain.setHostName(hostName); String ipAddress = ((ARecord) record).getAddress().getHostAddress(); foundSubDomain.setIpAddress(ipAddress); foundSubDomain.setLookupType("A"); entries.add(foundSubDomain); } } } return entries; }
public static String getDomainFromHost(String host) { String tmpHost = host; if (host.isEmpty()) { return ""; } while (true) { try { if (!tmpHost.startsWith("www.")) { Record[] recs = new Lookup(tmpHost, Type.SOA).run(); if (recs != null) { return tmpHost; } } if (tmpHost.contains(".")) { tmpHost = tmpHost.split("\\.", 2)[1]; } else { break; } } catch (TextParseException ex) { Logger.getLogger("networkTools.getDomainFromHost").log(Level.SEVERE, null, ex); break; } } return ""; }
public List<ARecordResult> getARecord(String hostName) throws TextParseException { List<ARecordResult> entries = null; Record[] recs = new Lookup(hostName, Type.A).run(); if (recs != null) { if (recs.length > 0) { entries = new ArrayList<>(); for (Record record : recs) { ARecordResult foundSubDomain = new ARecordResult(NetworkTools.getDomainFromHost(hostName)); foundSubDomain.setHostName(hostName); String ipAddress = ((ARecord) record).getAddress().getHostAddress(); foundSubDomain.setIpAddress(ipAddress); foundSubDomain.setLookupType("A"); entries.add(foundSubDomain); } } } return entries; }
public static Name getReverseIPName(final InetAddress adr, final Name postfix) { final byte[] addr = adr.getAddress(); final StringBuilder sb = new StringBuilder(); if (addr.length == 4) for (int i = addr.length - 1; i >= 0; i--) { sb.append(addr[i] & 0xFF); if (i > 0) sb.append("."); } else { final int[] nibbles = new int[2]; for (int i = addr.length - 1; i >= 0; i--) { nibbles[0] = (addr[i] & 0xFF) >> 4; nibbles[1] = addr[i] & 0xFF & 0xF; for (int j = nibbles.length - 1; j >= 0; j--) { sb.append(Integer.toHexString(nibbles[j])); if (i > 0 || j > 0) sb.append("."); } } } try { return Name.fromString(sb.toString(), postfix); } catch (final TextParseException e) { throw new IllegalStateException("name cannot be invalid"); } }
public static synchronized Message makeQuery(String nameString, int id) throws TextParseException { Name name = Name.fromString(nameString, Name.root); Record question = Record.newRecord(name, Type.A, DClass.ANY); Message query = Message.newQuery(question); query.getHeader().setID(id); return query; }
/** * Sends DNS request via system or custom DNS resolver */ private InetAddress[] requestLookup(String host) throws UnknownHostException { InetAddress[] addresses = null; if (isCustomResolver() && ((ExtendedResolver) resolver).getResolvers().length > 0) { try { Lookup lookup = new Lookup(host, Type.A); lookup.setCache(lookupCache); if (timeoutMs > 0) { resolver.setTimeout(timeoutMs / 1000, timeoutMs % 1000); } lookup.setResolver(resolver); Record[] records = lookup.run(); if (records == null || records.length == 0) { throw new UnknownHostException("Failed to resolve host name: " + host); } addresses = new InetAddress[records.length]; for (int i = 0; i < records.length; i++) { addresses[i] = ((ARecord) records[i]).getAddress(); } } catch (TextParseException tpe) { log.debug("Failed to create Lookup object: " + tpe); } } else { addresses = systemDefaultDnsResolver.resolve(host); if (log.isDebugEnabled()) { log.debug("Cache miss: " + host + " Thread #" + JMeterContextService.getContext().getThreadNum() + ", resolved with system resolver into " + Arrays.toString(addresses)); } } return addresses; }
@Test public void test() throws TextParseException { try { List<String> cnames = crossDcClusterServer.lookUpCname("xpipe1.ctripcorp.com"); logger.info("[test]{}", cnames); } catch (TextParseException e) { logger.error("[test]", e); } }
private Name toAbsoluteName(String name) { try { return Name.fromString(name, Name.root); } catch (TextParseException e) { throw new RuntimeException( String.format("toAbsoluteName failed for name: %s in zone: %s", name, zoneName), e); } }
private Lookup createLookup(String name) { try { return new Lookup( String.format("%s.%s.%s", name, configuration.getProto(), configuration.getDomain()), Type.SRV); } catch (TextParseException e) { throw new RuntimeCamelException(e); } }
@Test public void testEqualsObject () throws TextParseException { TextRecord txt1 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt2 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); Assert.assertTrue( "Both text records should be equal", txt1.equals( txt2 ) ); }
@Test public void testNotEqualsObject () throws TextParseException { TextRecord txt1 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt2 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt2", 3600 ) ); Assert.assertTrue( "Both text records should not be equal", !txt1.equals( txt2 ) ); }
@Test public void testCompareToDifferentPriority () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "eastcoastcoap._coap._udp.47zlpxulsrha.1.iotverisign.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "eastcoastcoap._coap._udp.47zlpxulsrha.1.iotverisign.", 1800, 1, 10, 3600 ) ); Assert.assertTrue( "Incorrect priority comparison", svc1.compareTo( svc2 ) < 1 ); Assert.assertTrue( "Incorrect priority comparison", svc2.compareTo( svc1 ) > 0 ); }
@Test public void testCompareToSamePriorityDifferentWeight () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "eastcoastcoap._coap._udp.47zlpxulsrha.1.iotverisign.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "eastcoastcoap._coap._udp.47zlpxulsrha.1.iotverisign.", 1800, 0, 20, 3600 ) ); Assert.assertTrue( "Incorrect weight comparison", svc1.compareTo( svc2 ) > 0 ); Assert.assertTrue( "Incorrect weight comparison", svc2.compareTo( svc1 ) < 0 ); }
@Test public void testCompareSamePriorityWeightAndDifferentHost () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "eastcoastcoap._coap._udp.47zlpxulsrha.1.iotverisign.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "eastcoastcoap._coap._udp.47zlpxulsrha.1.iotverisign.", 1800, 0, 10, 3600 ) ); ServiceRecord svc3 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "eastcoastcoap._coap._udp.47zlpxulsrha.1.iotverisign.", 1800, 0, 10, 3600 ) ); List<ServiceRecord> list = new ArrayList<ServiceRecord>( 3 ); list.add( svc2 ); list.add( svc3 ); list.add( svc1 ); Collections.sort( list ); Assert.assertTrue( "First element in the list should be svc1", list.get( 0 ).equals( svc1 ) ); Assert.assertTrue( "Second element in the list should be svc2", list.get( 1 ).equals( svc2 ) ); Assert.assertTrue( "Third element in the list should be svc3", list.get( 2 ).equals( svc3 ) ); }
@Test public void testCompareSamePriorityWeightHostAndDifferentPort () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host1.com.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host2.com.", 1801, 0, 10, 3600 ) ); ServiceRecord svc3 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host3.com.", 1802, 0, 10, 3600 ) ); List<ServiceRecord> list = new ArrayList<ServiceRecord>( 3 ); list.add( svc2 ); list.add( svc3 ); list.add( svc1 ); Collections.sort( list ); Assert.assertTrue( "First element in the list should be svc1", list.get( 0 ).equals( svc1 ) ); Assert.assertTrue( "Second element in the list should be svc2", list.get( 1 ).equals( svc2 ) ); Assert.assertTrue( "Third element in the list should be svc3", list.get( 2 ).equals( svc3 ) ); }
@Test public void testEquals () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 0, 10, 3600 ) ); TextRecord txt1 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt2 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); ServiceInstance svcInst1 = new ServiceInstance( serviceTypeCoap, svc1, txt1 ); ServiceInstance svcInst2 = new ServiceInstance( serviceTypeCoap, svc2, txt2 ); Assert.assertTrue( "Both service instances should be equal", svcInst1.equals( svcInst2 ) ); }
@Test public void testNotEquals () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 0, 10, 3600 ) ); TextRecord txt1 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt2 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); ServiceInstance svcInst1 = new ServiceInstance( serviceTypeCoap, svc1, txt1 ); ServiceInstance svcInst2 = new ServiceInstance( serviceTypeMqtt, svc2, txt2 ); Assert.assertTrue( "Both service instances should not be equal", !svcInst1.equals( svcInst2 ) ); }
@Test public void testCompareToDifferentPriority () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 1, 10, 3600 ) ); TextRecord txt1 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt2 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); ServiceInstance svcInst1 = new ServiceInstance( serviceTypeCoap, svc1, txt1 ); ServiceInstance svcInst2 = new ServiceInstance( serviceTypeCoap, svc2, txt2 ); Assert.assertTrue( "Incorrect priority comparison", svcInst1.compareTo( svcInst2 ) < 1 ); Assert.assertTrue( "Incorrect priority comparison", svcInst2.compareTo( svcInst1 ) > 0 ); }
@Test public void testCompareToSamePriorityDifferentWeight () throws TextParseException { ServiceRecord svc1 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 0, 10, 3600 ) ); ServiceRecord svc2 = ServiceRecord.build( DiscoveryRecordUtil.createSrvRecord( "host.com.", 1800, 0, 20, 3600 ) ); TextRecord txt1 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); TextRecord txt2 = TextRecord.build( DiscoveryRecordUtil.createTxtRecord( "txt1", 3600 ) ); ServiceInstance svcInst1 = new ServiceInstance( serviceTypeCoap, svc1, txt1 ); ServiceInstance svcInst2 = new ServiceInstance( serviceTypeCoap, svc2, txt2 ); Assert.assertTrue( "Incorrect priority comparison", svcInst1.compareTo( svcInst2 ) > 0 ); Assert.assertTrue( "Incorrect priority comparison", svcInst2.compareTo( svcInst1 ) < 0 ); }
private Lookup buildLookup() throws TextParseException, UnknownHostException { ExtendedResolver resolver = new ExtendedResolver(); resolver.setTimeout(serviceDnsTimeout); Lookup lookup = new Lookup(serviceDns, Type.SRV); lookup.setResolver(resolver); // Avoid caching temporary DNS lookup failures indefinitely in global cache lookup.setCache(null); return lookup; }
@Override public Lookup forName(String fqdn) { try { return new Lookup(fqdn, Type.SRV, DClass.IN); } catch (TextParseException e) { throw new DnsException("unable to create lookup for name: " + fqdn, e); } }
private Message messageWithRCode(String query, int rcode) throws TextParseException { Name queryName = Name.fromString(query); Record question = Record.newRecord(queryName, Type.SRV, DClass.IN); Message queryMessage = Message.newQuery(question); Message result = new Message(); result.setHeader(queryMessage.getHeader()); result.addRecord(question, Section.QUESTION); result.getHeader().setRcode(rcode); return result; }
private Message messageWithNodes(String query, Iterable<String> names) throws TextParseException { Name queryName = Name.fromString(query); Record question = Record.newRecord(queryName, Type.SRV, DClass.IN); Message queryMessage = Message.newQuery(question); Message result = new Message(); result.setHeader(queryMessage.getHeader()); result.addRecord(question, Section.QUESTION); for (String name1 : names){ result.addRecord(new SRVRecord(queryName, DClass.IN, 1, 1, 1, 8080, Name.fromString(name1)), Section.ANSWER); } return result; }
@Test public void shouldRethrowXBillExceptions() throws Exception { thrown.expect(DnsException.class); thrown.expectCause(isA(TextParseException.class)); factory.forName("bad\\1 name"); }
protected void addVectorEntry(String value, boolean inoutonly){ // Expecting int port numbers DNSLookupEntry tmp = null; try { tmp = new DNSLookupEntry(value, getLookupType()); } catch (TextParseException e) { Logger.log("Error parsing sensor["+getName()+"] JSON##"+value+"##: " + e.getLocalizedMessage()); // throw e; // e.printStackTrace(); } if(tmp != null ){ addVectorEntry(tmp); } }
public boolean sendAdd() throws TextParseException, IOException { boolean rc = false; Resolver res = createResolver(); String revIp = buildReverseIpString(); Name owner = new Name(revIp.toString()); PTRRecord ptr = new PTRRecord(owner, DClass.IN, ttl, new Name(fqdn)); Name _zone = buildZoneName(revIp); Update update = new Update(_zone); update.delete(owner); update.add(ptr); if (log.isDebugEnabled()) { log.debug("Sending reverse DDNS update (replace) to server=" + server + ":\n" + update.toString()); } else if (log.isInfoEnabled()) { log.info("Sending reverse DDNS update (replace): " + ptr.toString()); } Message response = res.send(update); if (response.getRcode() == Rcode.NOERROR) { log.info("Reverse DDNS update (replace) succeeded: " + ptr.toString()); rc = true; } else { log.error("Reverse DDNS update (replace) failed (rcode=" + Rcode.string(response.getRcode()) + "): " + ptr.toString()); } return rc; }
public boolean sendDelete() throws TextParseException, IOException { boolean rc = false; Resolver res = createResolver(); String revIp = buildReverseIpString(); Name owner = new Name(revIp); PTRRecord ptr = new PTRRecord(owner, DClass.IN, 0, new Name(fqdn)); Name _zone = buildZoneName(revIp); Update update = new Update(_zone); update.delete(ptr); if (log.isDebugEnabled()) { log.debug("Sending reverse DDNS update (delete) to server=" + server + ":\n" + update.toString()); } else if (log.isInfoEnabled()) { log.info("Sending reverse DDNS update (delete): " + ptr.toString()); } Message response = res.send(update); if (response.getRcode() == Rcode.NOERROR) { log.info("Reverse DDNS update (delete) succeeded: " + ptr.toString()); rc = true; } else { log.error("Reverse DDNS update (delete) failed (rcode=" + Rcode.string(response.getRcode()) + "): " + ptr.toString()); } return rc; }