Пример #1
0
 def multiaddr(self):
     items = [
         Address(self.domain,
                 str(rr.rdata),
                 dnslib.QTYPE[rr.rtype],
                 rclass=dnslib.CLASS[rr.rclass],
                 ttl=rr.ttl) for rr in self.record.rr
     ]
     return MultiAddress(items)
Пример #2
0
class DNSQuery(object):
    def __init__(self, data, storage, dnsrating):
        self.storage = storage
        self.data = data
        self.multiaddr = MultiAddress()
        self._domain = self._record = None
        self.dnsLookup = DNSLookup(self.domain, data, dnsrating)

    @property
    def domain(self):
        if not self._domain:
            self._record = dnslib.DNSRecord.parse(self.data)
            self._domain = str(self._record.questions[0].qname)
        return self._domain

    def lookup(self):
        self.multiaddr = self.storage.find(self.domain)
        if not self.multiaddr.is_valid():
            try:
                self.multiaddr = self.dnsLookup.multiaddr
                for address in self.dnsLookup.multiaddr:
                    self.storage.add(address.domain, address.ip, address.rtype,
                                     address.rclass, address.ttl)
            except DNSLookupException:
                pass
        return self.multiaddr

    def response(self):
        if self.lookup().is_valid():
            record = dnslib.DNSRecord(
                dnslib.DNSHeader(id=self._record.header.id, qr=1, rd=1, ra=1),
                q=dnslib.DNSQuestion(self.domain)
            )
            for address in self.multiaddr:
                answer = dnslib.RR(address.domain,
                                   ttl=address.time,
                                   rtype=qtype[address.rtype],
                                   rclass=_class[address.rclass],
                                   rdata=getattr(dnslib, address.rtype)(address.ip))
                record.add_answer(answer)
            packs = record.pack()
        else:
            try:
                packs = self.dnsLookup.record.pack()
            except DNSLookupException:
                return b''
        return packs
Пример #3
0
class DNSQuery(object):
    def __init__(self, data, storage, dnsrating):
        self.storage = storage
        self.data = data
        self.multiaddr = MultiAddress()
        self._domain = self._record = None
        self.dnsLookup = DNSLookup(self.domain, data, dnsrating)

    @property
    def domain(self):
        if not self._domain:
            self._record = dnslib.DNSRecord.parse(self.data)
            self._domain = str(self._record.questions[0].qname)
        return self._domain

    def lookup(self):
        self.multiaddr = self.storage.find(self.domain)
        if not self.multiaddr.is_valid():
            try:
                self.multiaddr = self.dnsLookup.multiaddr
                for address in self.dnsLookup.multiaddr:
                    self.storage.add(address.domain, address.ip, address.rtype,
                                     address.rclass, address.ttl)
            except DNSLookupException:
                pass
        return self.multiaddr

    def response(self):
        if self.lookup().is_valid():
            record = dnslib.DNSRecord(dnslib.DNSHeader(
                id=self._record.header.id, qr=1, rd=1, ra=1),
                                      q=dnslib.DNSQuestion(self.domain))
            for address in self.multiaddr:
                answer = dnslib.RR(address.domain,
                                   ttl=address.time,
                                   rtype=qtype[address.rtype],
                                   rclass=_class[address.rclass],
                                   rdata=getattr(dnslib,
                                                 address.rtype)(address.ip))
                record.add_answer(answer)
            packs = record.pack()
        else:
            try:
                packs = self.dnsLookup.record.pack()
            except DNSLookupException:
                return b''
        return packs
Пример #4
0
 def __init__(self, data, storage, dnsrating):
     self.storage = storage
     self.data = data
     self.multiaddr = MultiAddress()
     self._domain = self._record = None
     self.dnsLookup = DNSLookup(self.domain, data, dnsrating)
Пример #5
0
 def __init__(self, data, storage, dnsrating):
     self.storage = storage
     self.data = data
     self.multiaddr = MultiAddress()
     self._domain = self._record = None
     self.dnsLookup = DNSLookup(self.domain, data, dnsrating)