Java 类org.xbill.DNS.TXTRecord 实例源码

项目:dnsjnio    文件:PortTest.java   
public static int getPortFromResponse(Message m) {
    for (int i = 0; i < 4; i++) {
        try { // Can do something with the counts field here, instead of
            // cycling through all of these
            Record[] records = m.getSectionArray(i);
            if (records != null) {
                for (int j = 0; j < records.length; j++) {
                    if ((records[j]).getClass().equals(TXTRecord.class)) {
                        return Integer.valueOf(
                                ((String) (((TXTRecord) (records[j]))
                                        .getStrings().get(0)))).intValue();
                    }
                }
            }
        } catch (IndexOutOfBoundsException e) {
            // carry on!
        }
    }
    return -999;
}
项目:plum    文件:DnsResolver.java   
/**
 * 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 "";
    }
}
项目:mireka    文件:Dnsbl.java   
private String concatenateTxtRecordValues(Record[] records) {
    if (records == null || records.length == 0)
        return null;
    StringBuilder builder = new StringBuilder();
    for (Record record : records) {
        TXTRecord txtRecord = (TXTRecord) record;
        if (builder.length() != 0)
            builder.append(EOL);
        for (Object string : txtRecord.getStrings()) {
            if (builder.length() != 0)
                builder.append(EOL);
            builder.append(string);
        }
    }
    return builder.toString();
}
项目:dnssecjava    文件:TestBase.java   
protected String getReason(Message m) {
    for (RRset set : m.getSectionRRsets(Section.ADDITIONAL)) {
        if (set.getName().equals(Name.root) && set.getType() == Type.TXT && set.getDClass() == ValidatingResolver.VALIDATION_REASON_QCLASS) {
            StringBuilder sb = new StringBuilder();
            @SuppressWarnings("unchecked")
            List<String> strings = (List<String>)((TXTRecord)set.first()).getStrings();
            for (String part : strings){
                sb.append(part);
            }

            return sb.toString();
        }
    }

    return null;
}
项目:open-rmbt    文件:Helperfunctions.java   
public static Long getASN(final InetAddress adr)
{
    try
    {
        final Name postfix;
        if (adr instanceof Inet6Address)
            postfix = Name.fromConstantString("origin6.asn.cymru.com");
        else
            postfix = Name.fromConstantString("origin.asn.cymru.com");

        final Name name = getReverseIPName(adr, postfix);
        System.out.println("lookup: " + name);

        final Lookup lookup = new Lookup(name, Type.TXT);
        lookup.setResolver(new SimpleResolver());
        lookup.setCache(null);
        final Record[] records = lookup.run();
        if (lookup.getResult() == Lookup.SUCCESSFUL)
            for (final Record record : records)
                if (record instanceof TXTRecord)
                {
                    final TXTRecord txt = (TXTRecord) record;
                    @SuppressWarnings("unchecked")
                    final List<String> strings = txt.getStrings();
                    if (strings != null && !strings.isEmpty())
                    {
                        final String result = strings.get(0);
                        final String[] parts = result.split(" ?\\| ?");
                        if (parts != null && parts.length >= 1)
                            return new Long(parts[0].split(" ")[0]);
                    }
                }
    }
    catch (final Exception e)
    {
    }
    return null;
}
项目:open-rmbt    文件:Helperfunctions.java   
public static String getASName(final long asn)
{
    try
    {
        final Name postfix = Name.fromConstantString("asn.cymru.com.");
        final Name name = new Name(String.format("AS%d", asn), postfix);
        System.out.println("lookup: " + name);

        final Lookup lookup = new Lookup(name, Type.TXT);
        lookup.setResolver(new SimpleResolver());
        lookup.setCache(null);
        final Record[] records = lookup.run();
        if (lookup.getResult() == Lookup.SUCCESSFUL)
            for (final Record record : records)
                if (record instanceof TXTRecord)
                {
                    final TXTRecord txt = (TXTRecord) record;
                    @SuppressWarnings("unchecked")
                    final List<String> strings = txt.getStrings();
                    if (strings != null && !strings.isEmpty())
                    {
                        System.out.println(strings);

                        final String result = strings.get(0);
                        final String[] parts = result.split(" ?\\| ?");
                        if (parts != null && parts.length >= 1)
                            return parts[4];
                    }
                }
    }
    catch (final Exception e)
    {
    }
    return null;
}
项目:open-rmbt    文件:Helperfunctions.java   
public static String getAScountry(final long asn)
{
    try
    {
        final Name postfix = Name.fromConstantString("asn.cymru.com.");
        final Name name = new Name(String.format("AS%d", asn), postfix);
        System.out.println("lookup: " + name);

        final Lookup lookup = new Lookup(name, Type.TXT);
        lookup.setResolver(new SimpleResolver());
        lookup.setCache(null);
        final Record[] records = lookup.run();
        if (lookup.getResult() == Lookup.SUCCESSFUL)
            for (final Record record : records)
                if (record instanceof TXTRecord)
                {
                    final TXTRecord txt = (TXTRecord) record;
                    @SuppressWarnings("unchecked")
                    final List<String> strings = txt.getStrings();
                    if (strings != null && !strings.isEmpty())
                    {
                        final String result = strings.get(0);
                        final String[] parts = result.split(" ?\\| ?");
                        if (parts != null && parts.length >= 1)
                            return parts[1];
                    }
                }
    }
    catch (final Exception e)
    {
    }
    return null;
}
项目:jetstream    文件:DNSFileMap.java   
public String getTXT(String key) throws ConfigException {
  String qkey = fullyQualify(key);
  List<Record> list = m_records.get(makeHostKey(qkey));
  if (list == null || list.get(0).getType() != Type.TXT) {
    throw new NotFoundException("No such record: " + makeHostKey(qkey));
  }

  TXTRecord trec = (TXTRecord) list.get(0);

  String sdata = trec.rdataToString();
  if (sdata.charAt(0) == '"') {
    sdata = sdata.substring(1, sdata.length() - 1);
  }
  return sdata;
}
项目:tiaki-java    文件:DnsServicesDiscovery.java   
/**
 * Scrapes the Discovery Service Records according to their nature.
 *
 * @param records An array of <code>Record</code> retrieve upon a lookup
 * @param set A <code>ResourcesContainer</code>
 * @param pht A Resource Record Type holder
 */
private void parseRecords(Record[] records, final RecordsContainer set, RrHolderType pht)
{
    if (records != null) {
        for (Record record : records) {
            if ((record instanceof PTRRecord && pht == RrHolderType.ZONES) ||
                    (record instanceof PTRRecord && pht == RrHolderType.NAMES)) {
                String zone = PointerRecord.build((PTRRecord) record).getRData();
                if (zone != null) {
                    set.getLabels().add(zone);
                }
            } else if (record instanceof PTRRecord && pht == RrHolderType.TYPES) {
                set.getLabels().add(PointerRecord.build((PTRRecord) record).getServiceType());
            } else if (record instanceof SRVRecord) {
                ServiceRecord svcRecord = ServiceRecord.build((SRVRecord) record);
                if (svcRecord != null) {
                    set.getRecords().add(svcRecord);
                }
            } else if (record instanceof TXTRecord) {
                set.getTexts().add(TextRecord.build((TXTRecord) record));
            } else {
                errorsTrace.get().put(
                        ExceptionsUtil.traceKey(record.toString(), "",
                                "Parsing-Service-Records"),
                        StatusCode.RESOURCE_UNEXPECTED);
            }
        }
    }
}
项目:James    文件:DNSJavaService.java   
/**
 * @see org.apache.james.dnsservice.api.DNSService#findTXTRecords(String)
 */
public Collection<String> findTXTRecords(String hostname) {
    List<String> txtR = new ArrayList<String>();
    Record[] records = lookupNoException(hostname, Type.TXT, "TXT");

    if (records != null) {
        for (int i = 0; i < records.length; i++) {
            TXTRecord txt = (TXTRecord) records[i];
            txtR.add(txt.rdataToString());
        }

    }
    return txtR;
}
项目:buddycloud-android    文件:DNSUtils.java   
/**
 * Adapted from https://code.google.com/p/asmack/source/browse/src/custom/org/jivesoftware/smack/util/DNSUtil.java
 * 
 * @param domain
 * @return
 * @throws TextParseException
 */
@SuppressWarnings("unchecked")
private static String resolveAPITXT(String domain) throws TextParseException {
    Lookup lookup = new Lookup(TXT_PREFIX + domain, Type.TXT);
    Record recs[] = lookup.run();
    if (recs == null) {
        throw new RuntimeException("Could not lookup domain.");
    }

    Map<String, String> stringMap = null;
    for (Record rec : recs) {
        String rData = rec.rdataToString().replaceAll("\"", "");
        List<String> rDataTokens = Arrays.asList(rData.split("\\s+"));
        TXTRecord record = new TXTRecord(rec.getName(), rec.getDClass(), 
                rec.getTTL(), rDataTokens);
        List<String> strings = record.getStrings();
        if (strings != null && strings.size() > 0) {
            stringMap = parseStrings(strings);
            break;
        }
    }

    if (stringMap == null) {
        throw new RuntimeException("Domain has no TXT records for buddycloud.");
    }

    String host = stringMap.get("host");
    String protocol = stringMap.get("protocol");
    String path = stringMap.get("path");
    String port = stringMap.get("port");

    path = path == null || path.equals("/") ? "" : path;
    port = port == null ? "" : port;

    return protocol + "://" + host + ":" + port + path;
}
项目:acme4j    文件:DnsServer.java   
/**
 * Processes a DNS query.
 *
 * @param sock
 *            Socket to listen to
 */
private void process(DatagramSocket sock) {
    try {
        byte[] in = new byte[UDP_SIZE];

        // Read the question
        DatagramPacket indp = new DatagramPacket(in, UDP_SIZE);
        indp.setLength(UDP_SIZE);
        sock.receive(indp);
        Message msg = new Message(in);
        Header header = msg.getHeader();

        Record question = msg.getQuestion();

        // Prepare a response
        Message response = new Message(header.getID());
        response.getHeader().setFlag(Flags.QR);
        response.addRecord(question, Section.QUESTION);

        Name name = question.getName();
        boolean hasRecords = false;

        String txt = txtRecords.get(name.toString(true));
        if (question.getType() == Type.TXT && txt != null) {
            response.addRecord(new TXTRecord(name, DClass.IN, TTL, txt), Section.ANSWER);
            hasRecords = true;
            LOG.info("dns-01: {} {} IN TXT \"{}\"", name, TTL, txt);
        }

        InetAddress a = aRecords.get(name.toString(true));
        if (question.getType() == Type.A && a != null) {
            response.addRecord(new ARecord(name, DClass.IN, TTL, a), Section.ANSWER);
            hasRecords = true;
            LOG.info("dns-01: {} {} IN A {}", name, TTL, a.getHostAddress());
        }

        if (!hasRecords) {
            response.getHeader().setRcode(Rcode.NXDOMAIN);
            LOG.warn("dns-01: Cannot answer: {}", question);
        }

        // Send the response
        byte[] resp = response.toWire();
        DatagramPacket outdp = new DatagramPacket(resp, resp.length, indp.getAddress(), indp.getPort());
        sock.send(outdp);
    } catch (Exception ex) {
        LOG.error("Failed to process query", ex);
    }
}
项目:tiaki-java    文件:DnsUtil.java   
/**
 * Validate the DNSSEC trust chain against the provided domain name (i.e. <code>Fqdn</code>).
 *
 * @param name A <code>Fqdn</code> representing the validating domain
 * @param resolver A DNS <code>Resovler</code> to be used in this validation
 * @param rType An integer representing the record type
 *
 * @return <code>true</code> iff the DNSSEC is valid
 *
 * @throws LookupException
 *      Containing the specific <code>StatusCode</code> defining the error that has been raised.
 */
public static boolean checkDnsSec(Fqdn name, Resolver resolver, int rType)
                        throws LookupException
{
    try {
        ValidatingResolver validating = (ValidatingResolver) resolver;
        Record toValidate = Record.newRecord(Name.fromConstantString(name.fqdn()), rType, DClass.IN);
        Message dnsResponse = validating.send(Message.newQuery(toValidate));
        RRset[] rrSets = dnsResponse.getSectionRRsets(Section.ADDITIONAL);
        StringBuilder reason = new StringBuilder("");
        for (RRset rrset : rrSets) {
            if (rrset.getName().equals(Name.root) && rrset.getType() == Type.TXT
                    && rrset.getDClass() == ValidatingResolver.VALIDATION_REASON_QCLASS) {
                reason.append(TextRecord.build((TXTRecord) rrset.first()).getRData());
            }
        }
        StatusCode outcome = StatusCode.SUCCESSFUL_OPERATION;
        if (dnsResponse.getRcode() == Rcode.SERVFAIL) {
            if (reason.toString().toLowerCase().contains(CHAIN_OF_TRUST)
                    || reason.toString().toLowerCase().contains(INSECURE)) {
                outcome = StatusCode.RESOURCE_INSECURE_ERROR;
            } else if (reason.toString().toLowerCase().contains(NO_DATA)) {
                outcome = StatusCode.NETWORK_ERROR;
            } else if (reason.toString().toLowerCase().contains(NO_SIGNATURE)
                    || reason.toString().toLowerCase().contains(MISSING_KEY)) {
                outcome = StatusCode.RESOLUTION_NAME_ERROR;
            }
        } else if (dnsResponse.getRcode() == Rcode.NXDOMAIN) {
            if (reason.toString().toLowerCase().contains(NSEC3_NO_DS)) {
                outcome = StatusCode.RESOURCE_INSECURE_ERROR;
            } else {
                outcome = StatusCode.RESOLUTION_NAME_ERROR;
            }
        } else if (dnsResponse.getRcode() == Rcode.NOERROR
                && !dnsResponse.getHeader().getFlag(Flags.AD)) {
            outcome = StatusCode.RESOURCE_INSECURE_ERROR;
        }

        if (outcome != StatusCode.SUCCESSFUL_OPERATION) {
            throw ExceptionsUtil.build(outcome,
                    "DNSSEC Validation Failed",
                    new LinkedHashMap<String, StatusCode>());
        }
    } catch (IOException e) {
        // it might be a transient error network: retry with next Resolver
        return false;
    }

    return true;
}
项目:tiaki-java    文件:DiscoveryRecordUtil.java   
public static TXTRecord createTxtRecord ( String rdata, long ttl ) throws TextParseException {
    return new TXTRecord( Name.fromString( "example.com." ), DClass.IN, ttl, rdata );
}
项目:yeti    文件:DNS.java   
public static TXTRecord getTXTRecord(String hostName) {
    return null;
}
项目:yeti    文件:DataAPI.java   
public TXTRecord getTXTRecord(String hostName) {
    return null;
}
项目:dnssecjava    文件:TestTrustAnchorStore.java   
@Test(expected = IllegalArgumentException.class)
public void testInvalidAnchorRecord() throws TextParseException {
    SRRset set = new SRRset(new RRset(new TXTRecord(Name.fromString("bla."), DClass.IN, 0, "root")));
    TrustAnchorStore tas = new TrustAnchorStore();
    tas.store(set);
}
项目:vuze-remote-for-android    文件:DNSProvider.java   
public List<String>
getTXTRecords(
    String      query )
{
    List<String>    result = new ArrayList<>(2);

    try{
        Lookup l = new Lookup( query, Type.TXT );

        setCache( null, l );

        l.run();

        Record[] records = l.getAnswers();

        if ( records != null ){

            for ( Record r: records ){

                TXTRecord txt = (TXTRecord)r;

                result.addAll((List<String>)txt.getStrings());
            }
        }
    }catch( Throwable e ){

    }

    return( result );
}
项目:vuze-remote-for-android    文件:DNSProvider.java   
public String
getTXTRecord(
    String      query )

    throws UnknownHostException
{           
    try{
        Lookup l = new Lookup( query, Type.TXT );

        setCache( null, l );

        l.run();

        Record[] records = l.getAnswers();

        if ( records != null ){

            for ( Record r: records ){

                TXTRecord txt = (TXTRecord)r;

                List<String> strs = (List<String>)txt.getStrings();

                if ( strs.size() > 0 ){

                    return( strs.get( 0 ));
                }
            }
        }

        return( null );

    }catch( Throwable e ){

        throw( new UnknownHostException( query + ": " + Debug.getNestedExceptionMessage( e )));
    }
}
项目:tiaki-java    文件:TextRecord.java   
/**
 * Static builder. It wraps out a {@link TXTRecord} by extracting relevant data.
 *
 * @param txtRec
 *        A {@link TXTRecord} instance to be worked out
 * @return An instance of <code>TextRecord</code>
 */
public final static TextRecord build ( TXTRecord txtRec )
   {
    return new TextRecord( txtRec.rdataToString(), txtRec.getTTL() );
}