Exemplo n.º 1
0
    def test_one_a_query(self):
        "send 0 bytes follows by create a query packet containing one query record"

        s = None
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
            s.connect((os.getenv('SERVER_IP'), 53))
            s.send("", 0)
        finally:
            if s is not None:
                s.close()

        p = self.make_name_packet(dns.DNS_OPCODE_QUERY)
        questions = []

        name = "%s.%s" % (os.getenv('SERVER'), self.get_dns_domain())
        q = self.make_name_question(name, dns.DNS_QTYPE_A, dns.DNS_QCLASS_IN)
        print "asking for ", q.name
        questions.append(q)

        self.finish_name_packet(p, questions)
        response = self.dns_transaction_udp(p)
        self.assert_dns_rcode_equals(response, dns.DNS_RCODE_OK)
        self.assert_dns_opcode_equals(response, dns.DNS_OPCODE_QUERY)
        self.assertEquals(response.ancount, 1)
        self.assertEquals(response.answers[0].rdata, os.getenv('SERVER_IP'))
Exemplo n.º 2
0
    def test_one_a_query(self):
        "send 0 bytes follows by create a query packet containing one query record"

        s = None
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
            s.connect((os.getenv('SERVER_IP'), 53))
            s.send("", 0)
        finally:
            if s is not None:
                s.close()

        p = self.make_name_packet(dns.DNS_OPCODE_QUERY)
        questions = []

        name = "%s.%s" % (os.getenv('SERVER'), self.get_dns_domain())
        q = self.make_name_question(name, dns.DNS_QTYPE_A, dns.DNS_QCLASS_IN)
        print "asking for ", q.name
        questions.append(q)

        self.finish_name_packet(p, questions)
        response = self.dns_transaction_udp(p)
        self.assert_dns_rcode_equals(response, dns.DNS_RCODE_OK)
        self.assert_dns_opcode_equals(response, dns.DNS_OPCODE_QUERY)
        self.assertEquals(response.ancount, 1)
        self.assertEquals(response.answers[0].rdata,
                          os.getenv('SERVER_IP'))
Exemplo n.º 3
0
    def test_one_a_reply(self):
        "send a reply instead of a query"

        p = self.make_name_packet(dns.DNS_OPCODE_QUERY)
        questions = []

        name = "%s.%s" % ('fakefakefake', self.get_dns_domain())
        q = self.make_name_question(name, dns.DNS_QTYPE_A, dns.DNS_QCLASS_IN)
        print "asking for ", q.name
        questions.append(q)

        self.finish_name_packet(p, questions)
        p.operation |= dns.DNS_FLAG_REPLY
        s = None
        try:
            send_packet = ndr.ndr_pack(p)
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
            host=os.getenv('SERVER_IP')
            s.connect((host, 53))
            tcp_packet = struct.pack('!H', len(send_packet))
            tcp_packet += send_packet
            s.send(tcp_packet, 0)
            recv_packet = s.recv(0xffff + 2, 0)
            self.assertEquals(0, len(recv_packet))
        finally:
            if s is not None:
                s.close()
Exemplo n.º 4
0
    def test_one_a_reply(self):
        "send a reply instead of a query"

        p = self.make_name_packet(dns.DNS_OPCODE_QUERY)
        questions = []

        name = "%s.%s" % ('fakefakefake', self.get_dns_domain())
        q = self.make_name_question(name, dns.DNS_QTYPE_A, dns.DNS_QCLASS_IN)
        print "asking for ", q.name
        questions.append(q)

        self.finish_name_packet(p, questions)
        p.operation |= dns.DNS_FLAG_REPLY
        s = None
        try:
            send_packet = ndr.ndr_pack(p)
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
            host = os.getenv('SERVER_IP')
            s.connect((host, 53))
            tcp_packet = struct.pack('!H', len(send_packet))
            tcp_packet += send_packet
            s.send(tcp_packet, 0)
            recv_packet = s.recv(0xffff + 2, 0)
            self.assertEquals(0, len(recv_packet))
        finally:
            if s is not None:
                s.close()
Exemplo n.º 5
0
Arquivo: dns.py Projeto: sprymak/samba
 def dns_transaction_udp(self, packet, host=os.getenv('DC_SERVER_IP')):
     "send a DNS query and read the reply"
     s = None
     try:
         send_packet = ndr.ndr_pack(packet)
         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
         s.connect((host, 53))
         s.send(send_packet, 0)
         recv_packet = s.recv(2048, 0)
         return ndr.ndr_unpack(dns.name_packet, recv_packet)
     finally:
         if s is not None:
             s.close()
Exemplo n.º 6
0
 def dns_transaction_udp(self, packet, host=os.getenv('DC_SERVER_IP')):
     "send a DNS query and read the reply"
     s = None
     try:
         send_packet = ndr.ndr_pack(packet)
         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
         s.connect((host, 53))
         s.send(send_packet, 0)
         recv_packet = s.recv(2048, 0)
         return ndr.ndr_unpack(dns.name_packet, recv_packet)
     finally:
         if s is not None:
             s.close()
Exemplo n.º 7
0
Arquivo: dns.py Projeto: sprymak/samba
 def dns_transaction_tcp(self, packet, host=os.getenv('DC_SERVER_IP')):
     "send a DNS query and read the reply"
     s = None
     try:
         send_packet = ndr.ndr_pack(packet)
         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
         s.connect((host, 53))
         tcp_packet = struct.pack('!H', len(send_packet))
         tcp_packet += send_packet
         s.send(tcp_packet, 0)
         recv_packet = s.recv(0xffff + 2, 0)
         return ndr.ndr_unpack(dns.name_packet, recv_packet[2:])
     finally:
             if s is not None:
                 s.close()
Exemplo n.º 8
0
 def dns_transaction_tcp(self, packet, host=os.getenv('SERVER_IP')):
     "send a DNS query and read the reply"
     s = None
     try:
         send_packet = ndr.ndr_pack(packet)
         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
         s.connect((host, 53))
         tcp_packet = struct.pack('!H', len(send_packet))
         tcp_packet += send_packet
         s.send(tcp_packet, 0)
         recv_packet = s.recv(0xffff + 2, 0)
         return ndr.ndr_unpack(dns.name_packet, recv_packet[2:])
     finally:
         if s is not None:
             s.close()