def testSameName(self): name = "paired.local." generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE) question = r.DNSQuestion(name, r._TYPE_SRV, r._CLASS_IN) generated.addQuestion(question) generated.addQuestion(question) parsed = r.DNSIncoming(generated.packet())
def handle_read(self): try: data, (addr, port) = self.zeroconf.socket.recvfrom(dns._MAX_MSG_ABSOLUTE) except Exception as err: if getattr( err, 'errno', None ) == 9: # 'Bad file descriptor' during shutdown... pass else: log.info( 'Error on recvfrom: %s', err ) return None self.data = data msg = dns.DNSIncoming(data) if msg.isQuery(): # Always multicast responses # if port == dns._MDNS_PORT: self.zeroconf.handleQuery(msg, dns._MDNS_ADDR, dns._MDNS_PORT) # If it's not a multicast query, reply via unicast # # and multicast elif port == dns._DNS_PORT: self.zeroconf.handleQuery(msg, addr, port) self.zeroconf.handleQuery(msg, dns._MDNS_ADDR, dns._MDNS_PORT) else: log.error( "Unknown port: %s", port ) else: self.zeroconf.handleResponse(msg)
class Listener(object): """A Listener is used by this module to listen on the multicast group to which DNS messages are sent, allowing the implementation to cache information as it arrives. It requires registration with an Engine object in order to have the read() method called when a socket is availble for reading.""" def __init__(self, zeroconf): self.zeroconf = zeroconf self.zeroconf.engine.addReader(self, self.zeroconf.socket) def handle_read(self): try: data, (addr, port) = self.zeroconf.socket.recvfrom(dns._MAX_MSG_ABSOLUTE) except Exception, err: if getattr(err, 'errno', None) == 9: # 'Bad file descriptor' during shutdown... pass else: log.info('Error on recvfrom: %s', err) return None self.data = data try: msg = dns.DNSIncoming(data) except dns.NonLocalNameException, err: """We ignore mdns queries for non-local addresses, such as in-addr.arpa."""
def testLongName(self): generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE) question = r.DNSQuestion( "this.is.a.very.long.name.with.lots.of.parts.in.it.local.", r._TYPE_SRV, r._CLASS_IN) generated.addQuestion(question) parsed = r.DNSIncoming(generated.packet())
def testMatchQuestion(self): generated = r.DNSOutgoing(r._FLAGS_QR_QUERY) question = r.DNSQuestion("testname.local.", r._TYPE_SRV, r._CLASS_IN) generated.addQuestion(question) parsed = r.DNSIncoming(generated.packet()) self.assertEqual(len(generated.questions), 1) self.assertEqual(len(generated.questions), len(parsed.questions)) self.assertEqual(question, parsed.questions[0])
def testServiceDiscoverMessage(self): info = mdns.ServiceInfo( '_test._tcp.local.', 'blue._test._tcp.local.', socket.inet_aton('127.0.0.1'), 80, 0, 0, {}, server = 'myhost.local', ) out = mdns.Zeroconf.serviceAnnouncement( info ) temp = r.DNSIncoming(out.packet())
def testParseOwnPacketQuestion(self): generated = r.DNSOutgoing(r._FLAGS_QR_QUERY) generated.addQuestion( r.DNSQuestion("testname.local.", r._TYPE_SRV, r._CLASS_IN)) parsed = r.DNSIncoming(generated.packet()) print("parsed questions %s " % parsed.questions)
def testParseOwnPacketFlags(self): generated = r.DNSOutgoing(r._FLAGS_QR_QUERY) parsed = r.DNSIncoming(generated.packet()) print("parsed %s " % parsed)
def testParseOwnPacketSimpleUnicast(self): generated = r.DNSOutgoing(0, 0) parsed = r.DNSIncoming(generated.packet()) print("parsed %s " % parsed) self.assertEqual(type(parsed), r.DNSIncoming)
def testParseOwnPacketSimpleUnicast(self): generated = r.DNSOutgoing(0, 0) parsed = r.DNSIncoming(generated.packet())
def testExceedinglyLongName(self): generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE) name = "%slocal." % ("part." * 1000) question = r.DNSQuestion(name, r._TYPE_SRV, r._CLASS_IN) generated.addQuestion(question) parsed = r.DNSIncoming(generated.packet())