def handle_job(self, job): domain = job["domain"] server = job["server"] port = job["port"] result_contains = job.get("result_contains", None) try: q = DNSRecord(q=DNSQuestion(domain)) #, getattr(QTYPE,"A"))) a_pkt = q.send(server, port, tcp=False, timeout=10) a = DNSRecord.parse(a_pkt) found_record = False for record in a.rr: if (not result_contains): if ((record.rtype == QTYPE_A) or (record.qtype == QTYPE_CNAME)): found_record = True else: tmp = QTYPE.get(record.rtype) + str(record.rdata) if (result_contains in tmp): found_record = True if not found_record: if result_contains: job["status"] = "%s,No %s records" % (domain, result_contains) else: job["status"] = "%s,No A or CNAME records" % domain return except Exception, e: job["status"] = "%s,Exception: %s" % (domain, str(e)) return
def handle_job(self, job): domain = job["domain"] server = job["server"] port = job["port"] result_contains = job.get("result_contains", None) try: q = DNSRecord(q=DNSQuestion(domain)) #, getattr(QTYPE,"A"))) a_pkt = q.send(server, port, tcp=False, timeout=10) a = DNSRecord.parse(a_pkt) found_record = False for record in a.rr: if (not result_contains): QTYPE_A = getattr(QTYPE,"A") QTYPE_CNAME = getattr(QTYPE, "CNAME") if ((record.rtype==QTYPE_A) or (record.qtype==QTYPE_CNAME)): found_record = True else: tmp = QTYPE.get(record.rtype) + str(record.rdata) if (result_contains in tmp): found_record = True if not found_record: if result_contains: job["status"] = "%s,No %s records" % (domain, result_contains) else: job["status"] = "%s,No A or CNAME records" % domain return except Exception, e: job["status"] = "%s,Exception: %s" % (domain, str(e)) return
def send_mail(self, subject, message=None): record_message = os.linesep.join(["%s: %s" % (key, value) for key, value in { \ "id": self.record.pk, "region": self.record.region_name, "subdomain": self.record.full_subdomain, "rtype": QTYPE.get(self.record.rtype), "rclass": CLASS.get(self.record.rclass), "rdata": self.record.content }.items() ]) message = os.linesep.join([record_message, message or ""]) md5 = hashlib.md5() md5.update((subject + message).encode('utf8')) mail_id = md5.hexdigest() mail_interval = cache.get_or_set("mail_interval:%s" % mail_id, time.time(), settings.EMAIL_INTERVAL) if (time.time() - mail_interval) < settings.EMAIL_INTERVAL: return recipient_list = [user.email for user in \ self.record.domain.operators.all() if user.email] send_mail("%s%s" % (settings.EMAIL_SUBJECT_PREFIX, subject), message, from_email=None, recipient_list=recipient_list, fail_silently=True)
def query(self, request, origin=None): tracking_chain = [] # Prevent infinite recursion region = self._get_or_set_cached_region(origin) records, checker_records = [], [] for index, record in enumerate( self._query(request.questions, region, tracking_chain)): if index > settings.DNSKEY_MAXIMUM_QUERY_DEPTH: break if record.subdomain: checker_records.append(record) if record.status == 1: rr = RR.fromZone("{rr} {ttl} {rclass} {rtype} {rdata}".format( rr=record.full_subdomain, ttl=record.ttl, rclass=CLASS.get(record.rclass), rtype=QTYPE.get(record.rtype), rdata=record.content)) records.append(record) request.add_answer(*rr) if len(checker_records) > 0: query_records.send(sender=LocalQueryProxy, records=checker_records) return request
def __unicode__(self): return "%s %s %s" % (self.qname, QTYPE.get(self.qtype), CLASS.get(self.qclass))