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)
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
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
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)