Пример #1
0
	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())
Пример #2
0
 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)
Пример #3
0
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."""
Пример #4
0
 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())
Пример #5
0
	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])
Пример #6
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())
Пример #7
0
 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)
Пример #8
0
 def testParseOwnPacketFlags(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     parsed = r.DNSIncoming(generated.packet())
     print("parsed %s " % parsed)
Пример #9
0
 def testParseOwnPacketSimpleUnicast(self):
     generated = r.DNSOutgoing(0, 0)
     parsed = r.DNSIncoming(generated.packet())
     print("parsed %s " % parsed)
     self.assertEqual(type(parsed), r.DNSIncoming)
Пример #10
0
	def testParseOwnPacketSimpleUnicast(self):
		generated = r.DNSOutgoing(0, 0)
		parsed = r.DNSIncoming(generated.packet())
Пример #11
0
	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())