Validate DNS txt record entry for a domain

Sun, 02 April 2017

requirements.txt
dnspython
dns_lookup_service.py
import dns.resolver
from dns.rdtypes.ANY import TXT
import logging


class DnsLookupService(object):

    @staticmethod
    def has_txt_record(domain, record_to_check):
        """
        Check a domains TXT record for a given record.

        :param str domain: 
        :param str record_to_check: 
        :rtype: bool
        """
        resolve = dns.resolver.Resolver()
        resolve.nameservers = ['8.8.8.8', '8.8.4.4']
        answers = resolve.query(domain, "TXT")
        for piece in answers:  # type: TXT
            try:
                single = unicode(piece.to_text())
                if single[:1] == "\\\\"" and single[(len(single)-1):] == "\\\\"":
                    single = single[1:(len(single)-1)]
                    if single == unicode(record_to_check):
                        return True
            except Exception, e:  # More than likely a unicode decode error.
                logging.exception(e)
                pass
        return False
usage.py
from dns_lookup_service import DnsLookupService
DnsLookupService.has_txt_record('example.com', 'foo=bar')  # bool