Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
 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)
Пример #4
0
 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
Пример #5
0
 def __unicode__(self):
     return "%s %s %s" % (self.qname, QTYPE.get(self.qtype), CLASS.get(self.qclass))