Beispiel #1
0
class Test166a:

    def __init__(self,config,app):
        self.__app = app
        self.__queue_wan = Queue()
        self.__queue_lan = Queue()
        self.__config = config
        self.__interface = None
        self.__pkt = None
        self.addr_ceRouter = None
        self.mac_ceRouter = None
        self.__local_addr_ceRouter =None
        self.__ND_local_OK = False
        self.__sendmsgs = SendMsgs(self.__config)
        self.__config_setup1_1 = ConfigSetup1_1(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan','device_wan_tr1')
        self.__wan_mac_tr1 = self.__config.get('wan','wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan','link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast','all_nodes_addr')
        self.__test_desc = self.__config.get('tests','1.6.6a')
        self.msg_lan = self.__config.get('tests','1.6.6a')
        self.msg = self.__config.get('tests','1.6.6a')
    def get_addr_ceRouter(self):
        return self.addr_ceRouter
    
    def get_mac_ceRouter(self):
        return self.mac_ceRouter

    def set_flags(self):
        self.__config_setup1_1.set_flag_M(self.__config.get('t1.6.6a','flag_m'))
        self.__config_setup1_1.set_flag_O(self.__config.get('t1.6.6a','flag_o'))
        self.__config_setup1_1.set_flag_chlim(self.__config.get('t1.6.6a','flag_chlim'))
        self.__config_setup1_1.set_flag_L(self.__config.get('t1.6.6a','flag_l'))
        self.__config_setup1_1.set_flag_A(self.__config.get('t1.6.6a','flag_a'))
        self.__config_setup1_1.set_flag_R(self.__config.get('t1.6.6a','flag_r'))
        self.__config_setup1_1.set_flag_prf(self.__config.get('t1.6.6a','flag_prf'))
        self.__config_setup1_1.set_validlifetime(self.__config.get('t1.6.6a','validlifetime'))
        self.__config_setup1_1.set_preferredlifetime(self.__config.get('t1.6.6a','preferredlifetime'))
        self.__config_setup1_1.set_routerlifetime(self.__config.get('t1.6.6a','routerlifetime'))
        self.__config_setup1_1.set_intervalo(self.__config.get('t1.6.6a','intervalo'))    
        self.__config_setup1_1.set_pd_prefixlen(self.__config.get('t1.6.6a','pd_prefixlen'))
    def set_status_lan(self,v):
        self.msg_lan = v

    def get_status_lan(self):
        return self.msg_lan


    def set_status(self,v):
        self.msg = v

    def get_status(self):
        return self.msg



    def run(self):
        @self.__app.route("/LAN",methods=['GET'])
        def envia_lan():
            return self.get_status_lan()
        @self.__app.route("/WAN",methods=['GET'])
        def enviawan():
            return self.get_status()
        self.__packet_sniffer_wan = PacketSniffer('test166a',self.__queue_wan,self,self.__config,self.__wan_device_tr1)
        self.__packet_sniffer_wan.start()

        self.set_flags()         
        logging.info(self.__test_desc)
        t_test = 0
        sent_reconfigure = False
        time_over = False
        rs_ok = False
        send_ra = False
        send_ns =False
        send_ra2 = False
        cache_wan = []
        while not self.__queue_wan.full():
            while self.__queue_wan.empty():
                if t_test < 120:
                    time.sleep(1)
                    t_test = t_test + 1
                    logging.info('WAN: Tempo limite de teste 120 seg. Tempo atual: ' +str(t_test))
                    self.set_status('WAN: Tempo limite de teste 120 seg. Tempo atual:  ' +str(t_test))
                else:
                    self.__packet_sniffer_wan.stop() 
                    logging.info('Reprovado: Teste 1.6.6a- Cerouter com transmitiou Solicit dentro do tempo de Teste')
                    self.set_status('Reprovado: Teste 1.6.6a- Cerouter com transmitiou Solicit dentro do tempo de Teste')
                    time.sleep(2)
                    self.set_status('REPROVADO') # Mensagem padrão para o frontEnd atualizar Status
                    
                    self.__packet_sniffer_wan.stop()
                    return False
            pkt = self.__queue_wan.get()
            #if not self.__ND_local_OK:
            cache_wan.append(pkt)
            wrpcap("wan-1.6.6a.cap",cache_wan)
            if pkt.haslayer(ICMPv6ND_NS):

                if pkt[ICMPv6ND_NS].tgt == '::':

                    continue
                if pkt[IPv6].src == self.__config.get('wan','link_local_addr'):
                    continue
                if pkt[IPv6].src == self.__config.get('wan','global_wan_addr'):
                    continue
                if pkt[IPv6].src == '::':
                    if pkt[ICMPv6ND_NS].tgt != '::':

                        self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src)

                        self.__config_setup1_1.set_local_addr_ceRouter(pkt[ICMPv6ND_NS].tgt)

                        self.__ND_local_OK = True

                    if pkt[ICMPv6ND_NS].tgt != '::' and pkt[IPv6].src != '::':

                        pkt.show()

            if pkt.haslayer(ICMPv6ND_RS) and not self.__ND_local_OK:
                logging.info('WAN: Reprovado Teste 1.6.6a - Nao Recebeu ICMP NS antes do RS')
                self.set_status('WAN: Reprovado Teste 1.6.6a - Nao Recebeu ICMP NS antes do RS')
                time.sleep(2)
                self.set_status('REPROVADO') # Mensagem padrão para o frontEnd atualizar Status
                self.__packet_sniffer_wan.stop()
                return False  

            else:



                if not send_ns:
                    logging.info('WAN: TR1 Enviando ICMP NS')
                    self.set_status('WAN: TR1 Enviando ICMP NS')
                    self.__config_setup1_1.set_ether_src(self.__config.get('wan','link_local_mac'))
                    self.__config_setup1_1.set_ether_dst(self.__config.get('multicast','all_mac_nodes'))
                    self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','global_wan_addr'))
                    self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr'))
                    self.__config_setup1_1.set_tgt(self.__config.get('wan','link_local_addr'))
                    
                    self.__sendmsgs.send_icmp_ns(self.__config_setup1_1)
                    send_ns = True
                    continue
                if send_ns and not send_ra:   
                    logging.info('WAN: TR1 Enviando ICMP RA com Flag M para um e Flag O para zero')
                    self.set_status('WAN: TR1 Enviando ICMP RA com Flag M para um e Flag O para zero')    
                    self.__config_setup1_1.set_flag_M("1")
                    self.__config_setup1_1.set_flag_O("0")
                    self.__config_setup1_1.set_ether_src(self.__config.get('wan','ra_mac'))
                    self.__config_setup1_1.set_ether_dst(self.__config.get('multicast','all_mac_nodes'))
                    self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','link_local_addr'))
                    self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr'))
                    self.__sendmsgs.send_tr1_RA(self.__config_setup1_1)
                    send_ra = True
                    continue


                if send_ra:
                    if pkt.haslayer(DHCP6_Solicit):
                        logging.info('WAN: Recebido DHCP Solicit. Verificando se contem ICMP IA_PD')
                        self.set_status('WAN: Recebido DHCP Solicit. Verificando se contem ICMP IA_PD')
                        if pkt.haslayer(DHCP6OptIA_PD):

                            logging.info('WAN: APROVADO Teste 1.6.6a - Roteador Enviou solicit com Option IA_PD')
                            self.set_status('WAN: APROVADO Teste 1.6.6a - Roteador Enviou solicit com Option IA_PD')
                            time.sleep(2)
                            self.set_status('APROVADO') # Mensagem padrão para o frontEnd atualizar Status
                            self.__packet_sniffer_wan.stop()
                            return True
                        else:

                            logging.info('WAN: Reprovado Teste 1.6.6b - Roteador Enviou solicit sem Option IA_NA')
                            self.set_status('WAN: Reprovado Teste 1.6.6b - Falha em completar o setup LAN')
                            time.sleep(2)
                            self.set_status('REPROVADO') # Mensagem padrão para o frontEnd atualizar Status
                            self.__packet_sniffer_wan.stop()
                            return False  

   
        self.__packet_sniffer_wan.stop()
        return False
     
        
Beispiel #2
0
class Test166a:
    def __init__(self, config):
        self.__queue_wan = Queue()
        self.__queue_lan = Queue()
        self.__config = config
        self.__interface = None
        self.__pkt = None
        self.addr_ceRouter = None
        self.mac_ceRouter = None
        self.__local_addr_ceRouter = None
        self.__ND_local_OK = False
        self.__sendmsgs = SendMsgs(self.__config)
        self.__config_setup1_1 = ConfigSetup1_1(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan', 'device_wan_tr1')
        self.__wan_mac_tr1 = self.__config.get('wan', 'wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan', 'link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast',
                                                  'all_nodes_addr')
        self.__test_desc = self.__config.get('tests', '1.6.6a')

    def get_addr_ceRouter(self):
        return self.addr_ceRouter

    def get_mac_ceRouter(self):
        return self.mac_ceRouter

    def set_flags(self):
        self.__config_setup1_1.set_flag_M(
            self.__config.get('t1.6.6a', 'flag_m'))
        self.__config_setup1_1.set_flag_O(
            self.__config.get('t1.6.6a', 'flag_o'))
        self.__config_setup1_1.set_flag_chlim(
            self.__config.get('t1.6.6a', 'flag_chlim'))
        self.__config_setup1_1.set_flag_L(
            self.__config.get('t1.6.6a', 'flag_l'))
        self.__config_setup1_1.set_flag_A(
            self.__config.get('t1.6.6a', 'flag_a'))
        self.__config_setup1_1.set_flag_R(
            self.__config.get('t1.6.6a', 'flag_r'))
        self.__config_setup1_1.set_flag_prf(
            self.__config.get('t1.6.6a', 'flag_prf'))
        self.__config_setup1_1.set_validlifetime(
            self.__config.get('t1.6.6a', 'validlifetime'))
        self.__config_setup1_1.set_preferredlifetime(
            self.__config.get('t1.6.6a', 'preferredlifetime'))
        self.__config_setup1_1.set_routerlifetime(
            self.__config.get('t1.6.6a', 'routerlifetime'))
        self.__config_setup1_1.set_intervalo(
            self.__config.get('t1.6.6a', 'intervalo'))

    def run(self):
        self.__packet_sniffer_wan = PacketSniffer('test166a', self.__queue_wan,
                                                  self, self.__config,
                                                  self.__wan_device_tr1)
        self.__packet_sniffer_wan.start()

        self.set_flags()
        logging.info(self.__test_desc)
        t_test = 0
        sent_reconfigure = False
        time_over = False
        rs_ok = False
        send_ra = False
        send_ns = False
        send_ra2 = False
        while not self.__queue_wan.full():
            while self.__queue_wan.empty():
                if t_test < 60:
                    time.sleep(1)
                    t_test = t_test + 1
                else:
                    time_over = True
            pkt = self.__queue_wan.get()
            #if not self.__ND_local_OK:

            if pkt.haslayer(ICMPv6ND_NS):

                if pkt[ICMPv6ND_NS].tgt == '::':

                    pass
                if pkt[IPv6].src == self.__config.get('wan',
                                                      'link_local_addr'):
                    pass
                if pkt[IPv6].src == self.__config.get('wan',
                                                      'global_wan_addr'):
                    pass
                if pkt[IPv6].src == '::':
                    if pkt[ICMPv6ND_NS].tgt != '::':

                        self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src)

                        self.__config_setup1_1.set_local_addr_ceRouter(
                            pkt[ICMPv6ND_NS].tgt)

                        self.__ND_local_OK = True

                    if pkt[ICMPv6ND_NS].tgt != '::' and pkt[IPv6].src != '::':

                        pkt.show()

                    # self.addr_ceRouter = pkt[ICMPv6ND_NS].tgt
                    #     self.mac_ceRouter = pkt[Ether].src
                    #     self.__ND_local_OK = True

            if pkt.haslayer(ICMPv6ND_RS) and not self.__ND_local_OK:
                return False
            else:
                if not send_ns:
                    #self.__sendmsgs.set_flags_common_setup(self.__config_setup1_1)
                    self.__config_setup1_1.set_ether_src(
                        self.__config.get('wan', 'link_local_mac'))
                    self.__config_setup1_1.set_ether_dst(
                        self.__config.get('multicast', 'all_mac_nodes'))
                    self.__config_setup1_1.set_ipv6_src(
                        self.__config.get('wan', 'global_wan_addr'))
                    self.__config_setup1_1.set_ipv6_dst(
                        self.__config.get('multicast', 'all_nodes_addr'))
                    self.__config_setup1_1.set_tgt(
                        self.__config.get('wan', 'link_local_addr'))

                    self.__sendmsgs.send_icmp_ns(self.__config_setup1_1)
                    send_ns = True
                    continue
                if send_ns and not send_ra:
                    self.__config_setup1_1.set_flag_M("1")
                    self.__config_setup1_1.set_flag_O("0")
                    self.__config_setup1_1.set_ether_src(
                        self.__config.get('wan', 'ra_mac'))
                    self.__config_setup1_1.set_ether_dst(
                        self.__config.get('multicast', 'all_mac_nodes'))
                    self.__config_setup1_1.set_ipv6_src(
                        self.__config.get('wan', 'link_local_addr'))
                    self.__config_setup1_1.set_ipv6_dst(
                        self.__config.get('multicast', 'all_nodes_addr'))
                    self.__sendmsgs.send_tr1_RA(self.__config_setup1_1)
                    send_ra = True
                    continue
                    #self.set_ether_dst(pkt[Ether].src)

                if send_ra:
                    if pkt.haslayer(DHCP6_Solicit):
                        if pkt.haslayer(DHCP6OptIA_NA):
                            return True
                        else:
                            return False

            #if pkt.haslayer(DHCP6_Solicit) and send_ra2:

            # print('local addr')
            # print(self.get_local_addr_ceRouter())
            # print('ether dst')
            # print(self.get_ether_dst())
            #self.__ND_local_OK = True
        # if not self.__config_setup1_1.get_setup1_1_OK():

        #   if not self.__config_setup1_1.get_disapproved():
        #       self.__config_setup1_1.run_setup1_1(pkt)
        #    else:
        #       logging.info('Reprovado Teste 1.6.3.c - Falha em completar o Common Setup 1.1 da RFC')
        #        self.__packet_sniffer_wan.stop()
        #       return False

        #else:
        #    self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','link_local_addr'))
        #   self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','dhcp_relay_agents_and_servers_addr'))
        #   self.__config_setup1_1.set_ether_src(self.__config.get('wan','link_local_mac'))
        #   self.__config_setup1_1.set_ether_dst(self.__config_setup1_1.get_ether_dst())
        #  self.__config_setup1_1.set_dhcp_reconf_type(self.__config.get('t1.6.3','msg_type'))

        # if pkt.haslayer(DHCP6_Renew):
        #     logging.info('Reprovado Teste 1.6.3.c - Respondeu ao DHCP6 reconfigure incompleto')
        #     logging.info(pkt.show())
        #     self.__packet_sniffer_wan.stop()
        #     return False
        # elif time_over :
        #     if not sent_reconfigure:
        #         self.__packet_sniffer_wan.stop()
        #         logging.info('Falha: Teste 1.6.3.c. Tempo finalizado mas Não Enviou DHCP Reconfigure')

        #         return False
        #     else:
        #         self.__packet_sniffer_wan.stop()
        #         logging.info('Aprovado: Teste 1.6.3.c. Tempo finalizado e não recebeu DHCP Renew em DHCP Reconf adulterado')

        #         return True
        # if not sent_reconfigure:
        #     self.__sendmsgs.send_dhcp_reconfigure_no_auth(self.__config_setup1_1)
        #     sent_reconfigure = True

        # if pkt.haslayer(DHCP6_Solicit):
        #     self.__packet_sniffer_wan.stop()
        #     while not self.__queue_wan.empty():
        #         pkt = self.__queue_wan.get()
        #     return True
        # while not pkt.haslayer(IPv6):
        #     pkt = self.__queue_wan.get()
        self.__packet_sniffer_wan.stop()
        return False
Beispiel #3
0
class ConfigSetup1_1:

    def __init__(self,config):
        self.__config = config
        self.__interface = None
        self.__lla = None
        self.__pkt = None
        self.__valid = False
        self.__result = None
        self.__device_lan_tn1 = None
        self.__lan_mac_tn1 = None
        self.__ceRouter_mac_addr = None
        self.__flag_M = None
        self.__flag_O = None
        self.__flag_chlim = None
        self.__flag_L = None
        self.__flag_A = None
        self.__flag_R = None
        self.__validlifetime = None
        self.__preferredlifetime = None
        self.__interval = None
        self.__routerlifetime = None
        self.__ipv6_dst =None
        self.__ipv6_src = None
        self.__ether_src = None
        self.__ether_dst = None
        self.__xid = None
        self.__server_duid = None
        self.__client_duid = None
        self.__ND_local_OK = False
        self.__setup1_1_OK = False
        self.__local_ping_OK = False
        self.__global_ns_ok = False
        self.__dhcp_ok = False
        self.__active_DHCP_no_IA_PD = False
        self.__iaid = None
        self.__mac_cerouter = None
        self.__flag_prf = None
        self.udp_dport = None
        self.udp_sport = None
        self.__reachabletime = None
        self.__retranstimer = None
        self.__disapproved = False
        self.__dhcp_reconf_type = None
        self.__local_addr_ceRouter =None
        self.__dhcp_t1 = None
        self.__dhcp_t2 = None   
        self.__dhcp_preflft = None
        self.__dhcp_plen = None
        self.__dhcp_validlft = None
        self.__active_renew_dhcp = None
        self.__prefix_addr = None
        self.__set_ra2 = False
        self.__recvd_dhcp_renew = False
        self.__dhcp_renew_done = False
        self.__pd_prefixlen = None
        self.__sendmsgssetup1_1 = SendMsgs(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan','device_wan_tr1')
        self.__wan_mac_tr1 = self.__config.get('wan','wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan','link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast','all_nodes_addr')
        self.__test_desc = self.__config.get('tests','1.6.2b')
        
    def get_prefix_addr(self):
        return self.__prefix_addr
    def set_prefix_addr(self,valor):
        self.__prefix_addr = valor

    def get_reachabletime(self):
        return int(self.__reachabletime)
    
    def get_retranstimer(self):
        return int(self.__retranstimer)

    def set_reachabletime(self,valor):
        self.__reachabletime = valor
    
    def set_retranstimer(self,valor):
        self.__retranstimer = valor

    def get_recvd_dhcp_renew(self):
        return self.__recvd_dhcp_renew

    def active_DHCP_no_IA_PD(self):
        self.__active_DHCP_no_IA_PD = True

    def get_setup1_1_OK(self):
        return self.__setup1_1_OK

    def set_result(self, valor):
        self.__result = valor
        
    def get_result(self):
        return self.__result

    def send_icmpv6_ra(self,pkt):
        et = Ether(src=self.__wan_mac_tr1)#,\
                   #dst=pkt[Ether].src)
        ip = IPv6(src=self.__link_local_addr,\
                  dst=self.__all_nodes_addr)
        icmp_ra = ICMPv6ND_RA()
        sendp(et/ip/icmp_ra,iface=self.__wan_device_tr1)

    def send_echo_request_lan(self):
        et = Ether(src=self.__wan_mac_tr1,\
                   dst=self.__ceRouter_mac_addr)
        ip = IPv6(src=self.__link_local_addr,\
                  dst=self.__all_nodes_addr)
        icmp_ra = ICMPv6EchoRequest()
        sendp(et/ip/icmp_ra,iface=self.__wan_device_tr1)

    def flags_partA(self):
        self.__flag_M = self.__config.get('t1.6.2_flags_part_a','flag_m')
        self.__flag_O = self.__config.get('t1.6.2_flags_part_a','flag_o')
        self.__flag_chlim = self.__config.get('t1.6.2_flags_part_a','flag_chlim')
        self.__flag_L = self.__config.get('t1.6.2_flags_part_a','flag_l')
        self.__flag_A = self.__config.get('t1.6.2_flags_part_a','flag_a')
        self.__flag_R = self.__config.get('t1.6.2_flags_part_a','flag_r')
        self.__validlifetime = self.__config.get('t1.6.2_flags_part_a','validlifetime')
        self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_a','preferredlifetime')
        self.__routerlifetime = self.__config.get('t1.6.2_flags_part_a','routerlifetime')
        self.__intervalo = self.__config.get('t1.6.2_flags_part_a','intervalo')

    def flags_partB(self):
        self.__flag_M = self.__config.get('t1.6.2_flags_part_b','flag_m')
        self.__flag_O = self.__config.get('t1.6.2_flags_part_b','flag_o')
        self.__flag_chlim = self.__config.get('t1.6.2_flags_part_b','flag_chlim')
        self.__flag_L = self.__config.get('t1.6.2_flags_part_b','flag_l')
        self.__flag_A = self.__config.get('t1.6.2_flags_part_b','flag_a')
        self.__flag_R = self.__config.get('t1.6.2_flags_part_b','flag_r')
        self.__validlifetime = self.__config.get('t1.6.2_flags_part_b','validlifetime')
        self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_b','preferredlifetime')
        self.__routerlifetime = self.__config.get('t1.6.2_flags_part_b','routerlifetime')
        self.__intervalo = self.__config.get('t1.6.2_flags_part_b','intervalo')

    def get_flag_M(self):
        return int(self.__flag_M)

    def set_flag_M(self,valor):
        self.__flag_M = valor

    def get_flag_O(self):
        return int(self.__flag_O)
    def set_flag_O(self,valor):
        self.__flag_O= valor

    def get_flag_prf(self):
        return int(self.__flag_prf)

    def set_flag_prf(self,valor):
        self.__flag_prf = valor

    def set_flag_0(self,valor):
        self.__flag_O = valor

    def set_routerlifetime(self,valor):
        self.__routerlifetime= valor

    def set_flag_L(self,valor):
        self.__flag_L = valor
        
    def set_flag_A(self,valor):
        self.__flag_A = valor

    def set_flag_R(self,valor):
        self.__flag_R = valor

    def set_validlifetime(self,valor):
        self.__validlifetime = valor

    def set_preferredlifetime(self,valor):
        self.__preferredlifetime = valor

    def set_intervalo(self,valor):
        self.__intervalo = valor
        
    def set_flag_chlim(self,valor):
        self.__flag_chlim = valor

    def get_flag_chlim(self):
        return int(self.__flag_chlim)

    def get_flag_L(self):
        return  int(self.__flag_L)

    def get_flag_A(self):
        return int(self.__flag_A)

    def get_flag_R(self):
        return int(self.__flag_R)

    def get_validlifetime(self):
        return int(self.__validlifetime)

    def get_preferredlifetime(self):
        return int(self.__preferredlifetime)

    def get_interval(self):
        return int(self.__intervalo)

    def get_routerlifetime(self):
        return int(self.__routerlifetime)
    
    def set_ipv6_dst(self, valor):
        self.__ipv6_dst = valor

    def get_ipv6_dst(self):
        return self.__ipv6_dst

    def set_ipv6_src(self, valor):
        self.__ipv6_src = valor

    def get_ipv6_src(self):
        return self.__ipv6_src

    def set_ether_dst(self, valor):
        self.__ether_dst = valor

    def get_ether_dst(self):
        return self.__ether_dst

    def set_ether_src(self, valor):
        self.__ether_src = valor
        
    def set_ND_local_OK(self):
        self.__ND_local_OK = True

    def get_ether_src(self):
        return self.__ether_src
    
    def set_local_addr_ceRouter(self,valor):
        self.__local_addr_ceRouter = valor

    def get_local_addr_ceRouter(self):
        return self.__local_addr_ceRouter

    def set_tgt(self,valor):
        self.__tgt = valor

    def get_tgt(self):
        return self.__tgt

    def set_xid(self,valor):
        self.__xid = valor

    def get_xid(self):
        return self.__xid

    def set_client_duid(self,valor):
        self.__client_duid = valor

    def get_client_duid(self):
        return self.__client_duid

    def set_server_duid(self,valor):
        self.__server_duid = valor

    def get_server_duid(self):
        return self.__server_duid

    def set_iaid(self,valor):
        self.__iaid = valor

    def get_iaid(self):
        return self.__iaid
    
    def get_local_ping(self):
        return self.__local_ping_OK

    def get_ND_local_OK(self):
        return  self.__ND_local_OK

    def get_dhcp_reconf_type(self):
        return self.__dhcp_reconf_type
    
    def set_dhcp_reconf_type(self,valor):
        self.__dhcp_reconf_type = valor

    def set_mac_ceRouter(self,valor):
        self.__mac_cerouter = valor

    def get_mac_ceRouter(self):
        return self.__mac_cerouter

    def get_disapproved(self):
        return self.__disapproved

    def get_lla(self):
        return self.__lla

    def set_lla(self,valor):
        self.__lla = valor

    def set_setup1_1_OK(self,valor):
        self.__setup1_1_OK = valor
    
    def get_udp_sport(self):
        return int(self.udp_sport)
    
    def set_udp_sport(self,valor):
        self.udp_sport = valor

    def set_ra2(self):
        self.__set_ra2 = True
    
    def get_udp_dport(self):
        return int(self.udp_dport)
    
    def set_udp_dport(self,valor):
        self.udp_dport = valor

    def set_pd_prefixlen(self,valor):
        self.__pd_prefixlen = valor

    def get_pd_prefixlen(self):
        return int(self.__pd_prefixlen)

    def set_dhcp_t1(self,valor):
        self.__dhcp_t1 = valor
    def set_dhcp_t2(self,valor):
        self.__dhcp_t2 = valor   
    def set_dhcp_preflft(self,valor):
        self.__dhcp_preflft = valor
    def set_dhcp_plen(self,valor):
        self.__dhcp_plen = valor
    def set_dhcp_validlft(self,valor):
        self.__dhcp_validlft = valor

    def get_dhcp_t1(self):
        return int(self.__dhcp_t1)
    def get_dhcp_t2(self):
        return int(self.__dhcp_t2)   
    def get_dhcp_preflft(self):
        return int(self.__dhcp_preflft)
    def get_dhcp_plen(self):
        return int(self.__dhcp_plen)
    def get_dhcp_validlft(self):
        return int(self.__dhcp_validlft)

    def active_renew_dhcp(self):
        self.__active_renew_dhcp = True

    def get_dhcp_renew_done(self):
        return self.__dhcp_renew_done
    

    def check_layers(self,pkt):
        if pkt.haslayer(DHCP6_Renew):
            self.__recvd_dhcp_renew = True

            if self.__active_renew_dhcp:
                self.set_mac_ceRouter(pkt[Ether].src)
                self.set_local_addr_ceRouter(pkt[IPv6].src)
                self.set_xid(pkt[DHCP6_Renew].trid)
                self.set_ipv6_src(self.__config.get('wan','link_local_addr'))
                self.set_ipv6_dst(pkt[IPv6].src)
                self.set_ether_src(self.__config.get('wan','link_local_mac'))
                self.set_ether_dst(pkt[Ether].src)
                self.__sendmsgssetup1_1.send_dhcp_reply_v2(self)
                self.__dhcp_renew_done = True

    def run_setup1_1(self,pkt):

        if pkt[Ether].src == self.__config.get('wan','link_local_mac'):
            return
        if pkt[Ether].src == self.__config.get('wan','ra_mac'):
            return
        if self.__disapproved:
            return False

        if pkt.haslayer(ICMPv6EchoReply):
            if pkt[IPv6].dst == self.__config.get('wan','link_local_addr'):
                self.__local_ping_OK = True
                return

        if pkt.haslayer(ICMPv6ND_NS):
            if pkt[ICMPv6ND_NS].tgt == '::':
                return
            if pkt[IPv6].src == self.__config.get('wan','link_local_addr'):
                return
            if pkt[IPv6].src == self.__config.get('wan','global_wan_addr'):
                return
            if pkt[IPv6].src == self.__config.get('wan','ra_address'):
                return      
            if pkt.haslayer(ICMPv6EchoRequest):
                return

            if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','link_local_addr'):
                if pkt[IPv6].src == self.__config.get('wan','link_local_addr'):
                    return
                if pkt[IPv6].src == self.__config.get('wan','global_wan_addr'):
                    return            
                if pkt[IPv6].src == self.__config.get('wan','ra_address'):
                    return        
                self.set_mac_ceRouter(pkt[Ether].src)

                self.set_local_addr_ceRouter(pkt[IPv6].src)
                self.set_ipv6_src(self.__config.get('wan','link_local_addr'))
                self.set_ipv6_dst(pkt[IPv6].src)
                self.set_ether_src(self.__config.get('wan','link_local_mac'))
                self.set_ether_dst(pkt[Ether].src)
                self.set_tgt(self.__config.get('wan','link_local_addr'))
                self.set_lla(self.__config.get('wan','link_local_mac'))
                if not self.__local_ping_OK:
                    self.__sendmsgssetup1_1.send_icmp_na(self)
            else:

                self.set_local_addr_ceRouter(pkt[ICMPv6ND_NS].tgt)
                self.set_mac_ceRouter(pkt[Ether].src)
                self.set_ipv6_src(self.__config.get('wan','link_local_addr'))
                self.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr'))
                self.set_ether_src(self.__config.get('wan','link_local_mac'))
                self.set_ether_dst(self.__config.get('multicast','all_mac_nodes'))
                self.set_tgt(self.get_local_addr_ceRouter())

                self.set_lla(self.__config.get('wan','link_local_mac'))
                if not self.__ND_local_OK:
                    self.__sendmsgssetup1_1.send_icmp_ns(self)

                    return

        if pkt.haslayer(ICMPv6ND_NA) and not  self.__local_ping_OK:
            self.set_ipv6_src(self.__config.get('wan','link_local_addr'))
            self.set_ipv6_dst(self.get_local_addr_ceRouter())
            self.set_ether_src(self.__config.get('wan','link_local_mac'))
            self.set_ether_dst(self.get_mac_ceRouter())
            self.__sendmsgssetup1_1.send_echo_request(self)  
            self.__ND_local_OK = True
        else:
            if not  self.__local_ping_OK:
                self.set_ipv6_src(self.__config.get('wan','link_local_addr'))
                self.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr'))
                self.set_ether_src(self.__config.get('wan','link_local_mac'))
                self.set_ether_dst(self.__config.get('multicast','all_mac_nodes'))
                self.set_tgt(self.get_local_addr_ceRouter())
                self.set_lla(self.__config.get('wan','link_local_mac'))
                self.__sendmsgssetup1_1.send_icmp_ns(self)

        if pkt.haslayer(ICMPv6ND_RS):
            if self.__local_ping_OK:
                self.set_ether_src(self.__config.get('wan','ra_mac'))
                self.set_ether_dst(self.__config.get('multicast','all_mac_nodes'))
                self.set_ipv6_src(self.__config.get('wan','ra_address'))
                self.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr'))
                if not self.__set_ra2:
                    print('RA_NORMAL')
                    self.__sendmsgssetup1_1.send_tr1_RA(self)
                else:
                    print('RA_versao2L')
                    self.__sendmsgssetup1_1.send_tr1_RA2(self)
            else:
                self.set_local_addr_ceRouter(pkt[IPv6].src)
                self.set_mac_ceRouter(pkt[Ether].src)                

        if pkt.haslayer(DHCP6_Solicit) and self.__local_ping_OK:
            logging.info('Início do DHCPv6')
            self.set_xid(pkt[DHCP6_Solicit].trid)
            self.set_client_duid(pkt[DHCP6OptClientId].duid)
            self.set_server_duid((self.__config.get('setup1-1_advertise','server_duid')))
            self.set_iaid(pkt[DHCP6OptIA_NA].iaid)
            self.set_ether_src(self.__config.get('wan','link_local_mac'))
            self.set_ether_dst(pkt[Ether].src)
            self.set_ipv6_dst(pkt[IPv6].src)
            self.set_local_addr_ceRouter(pkt[IPv6].src)
            self.set_mac_ceRouter(pkt[Ether].src)

            self.set_ipv6_src(self.__config.get('wan','link_local_addr'))  
            if not self.__active_DHCP_no_IA_PD:
                self.__sendmsgssetup1_1.send_dhcp_advertise(self)
            else:
                self.__sendmsgssetup1_1.send_dhcp_advertise_no_IA_PD(self)
        elif pkt.haslayer(DHCP6_Solicit):
            self.set_local_addr_ceRouter(pkt[IPv6].src)
            self.set_mac_ceRouter(pkt[Ether].src)


        if pkt.haslayer(DHCP6_Request):
            logging.info('Conclusão do DHCPv6')
            self.set_mac_ceRouter(pkt[Ether].src)
            self.set_local_addr_ceRouter(pkt[IPv6].src)
            self.set_xid(pkt[DHCP6_Request].trid)
            self.set_ipv6_src(self.__config.get('wan','link_local_addr'))
            self.set_ipv6_dst(pkt[IPv6].src)
            self.set_ether_src(self.__config.get('wan','link_local_mac'))
            self.set_ether_dst(pkt[Ether].src)
            self.__sendmsgssetup1_1.send_dhcp_reply(self)
            self.__dhcp_ok = True
            self.__setup1_1_OK = True
            logging.info("Common Test Setup 1.1 OK")
Beispiel #4
0
class ConfigSetup1_1:
    def __init__(self, config):
        #self.__queue_wan = Queue()
        #self.__queue_lan = Queue()
        #logging.info('self.__queue_size_inicio162')
        #logging.info(self.__queue_wan.qsize())
        self.__config = config
        self.__interface = None
        self.__lla = None
        self.__pkt = None
        self.__valid = False
        self.__result = None
        self.__device_lan_tn1 = None
        self.__lan_mac_tn1 = None
        self.__ceRouter_mac_addr = None
        self.__flag_M = None
        self.__flag_O = None
        self.__flag_chlim = None
        self.__flag_L = None
        self.__flag_A = None
        self.__flag_R = None
        self.__validlifetime = None
        self.__preferredlifetime = None
        self.__interval = None
        self.__routerlifetime = None
        self.__ipv6_dst = None
        self.__ipv6_src = None
        self.__ether_src = None
        self.__ether_dst = None
        self.__xid = None
        self.__server_duid = None
        self.__client_duid = None
        self.__ND_local_OK = False
        self.__setup1_1_OK = False
        self.__local_ping_OK = False
        self.__global_ns_ok = False
        self.__dhcp_ok = False
        self.__active_DHCP_no_IA_PD = False
        self.__iaid = None
        self.__mac_cerouter = None
        self.__flag_prf = None
        self.udp_dport = None
        self.udp_sport = None
        self.__reachabletime = None
        self.__retranstimer = None
        self.__disapproved = False
        self.__dhcp_reconf_type = None
        self.__local_addr_ceRouter = None
        self.__dhcp_t1 = None
        self.__dhcp_t2 = None
        self.__dhcp_preflft = None
        self.__dhcp_plen = None
        self.__dhcp_validlft = None
        self.__active_renew_dhcp = None
        self.__prefix_addr = None
        self.__set_ra2 = False
        self.__recvd_dhcp_renew = False
        self.__dhcp_renew_done = False
        self.__sendmsgssetup1_1 = SendMsgs(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan', 'device_wan_tr1')
        self.__wan_mac_tr1 = self.__config.get('wan', 'wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan', 'link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast',
                                                  'all_nodes_addr')
        self.__test_desc = self.__config.get('tests', '1.6.2b')

        #self.__packet_sniffer.daemon=True

    #recebe o pacote
    #packetSniffer return pkt

    def get_prefix_addr(self):
        return self.__prefix_addr

    def set_prefix_addr(self, valor):
        self.__prefix_addr = valor

    def get_reachabletime(self):
        return int(self.__reachabletime)

    def get_retranstimer(self):
        return int(self.__retranstimer)

    def set_reachabletime(self, valor):
        self.__reachabletime = valor

    def set_retranstimer(self, valor):
        self.__retranstimer = valor

    def get_recvd_dhcp_renew(self):
        return self.__recvd_dhcp_renew

    def active_DHCP_no_IA_PD(self):
        self.__active_DHCP_no_IA_PD = True

    def get_setup1_1_OK(self):
        return self.__setup1_1_OK

    def set_result(self, valor):
        self.__result = valor

    def get_result(self):
        return self.__result

    def send_icmpv6_ra(self, pkt):
        et = Ether(src=self.__wan_mac_tr1)  #,\
        #dst=pkt[Ether].src)
        ip = IPv6(src=self.__link_local_addr,\
                  dst=self.__all_nodes_addr)
        icmp_ra = ICMPv6ND_RA()
        sendp(et / ip / icmp_ra, iface=self.__wan_device_tr1)

    def send_echo_request_lan(self):
        et = Ether(src=self.__wan_mac_tr1,\
                   dst=self.__ceRouter_mac_addr)
        ip = IPv6(src=self.__link_local_addr,\
                  dst=self.__all_nodes_addr)
        icmp_ra = ICMPv6EchoRequest()
        sendp(et / ip / icmp_ra, iface=self.__wan_device_tr1)

    def flags_partA(self):
        self.__flag_M = self.__config.get('t1.6.2_flags_part_a', 'flag_m')
        self.__flag_O = self.__config.get('t1.6.2_flags_part_a', 'flag_o')
        self.__flag_chlim = self.__config.get('t1.6.2_flags_part_a',
                                              'flag_chlim')
        self.__flag_L = self.__config.get('t1.6.2_flags_part_a', 'flag_l')
        self.__flag_A = self.__config.get('t1.6.2_flags_part_a', 'flag_a')
        self.__flag_R = self.__config.get('t1.6.2_flags_part_a', 'flag_r')
        self.__validlifetime = self.__config.get('t1.6.2_flags_part_a',
                                                 'validlifetime')
        self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_a',
                                                     'preferredlifetime')
        self.__routerlifetime = self.__config.get('t1.6.2_flags_part_a',
                                                  'routerlifetime')
        self.__intervalo = self.__config.get('t1.6.2_flags_part_a',
                                             'intervalo')

    def flags_partB(self):
        self.__flag_M = self.__config.get('t1.6.2_flags_part_b', 'flag_m')
        self.__flag_O = self.__config.get('t1.6.2_flags_part_b', 'flag_o')
        self.__flag_chlim = self.__config.get('t1.6.2_flags_part_b',
                                              'flag_chlim')
        self.__flag_L = self.__config.get('t1.6.2_flags_part_b', 'flag_l')
        self.__flag_A = self.__config.get('t1.6.2_flags_part_b', 'flag_a')
        self.__flag_R = self.__config.get('t1.6.2_flags_part_b', 'flag_r')
        self.__validlifetime = self.__config.get('t1.6.2_flags_part_b',
                                                 'validlifetime')
        self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_b',
                                                     'preferredlifetime')
        self.__routerlifetime = self.__config.get('t1.6.2_flags_part_b',
                                                  'routerlifetime')
        self.__intervalo = self.__config.get('t1.6.2_flags_part_b',
                                             'intervalo')

    def get_flag_M(self):
        return int(self.__flag_M)

    def set_flag_M(self, valor):
        self.__flag_M = valor

    def get_flag_O(self):
        return int(self.__flag_O)

    def set_flag_O(self, valor):
        self.__flag_O = valor

    def get_flag_prf(self):
        return int(self.__flag_prf)

    def set_flag_prf(self, valor):
        self.__flag_prf = valor

    def set_flag_0(self, valor):
        self.__flag_O = valor

    def set_routerlifetime(self, valor):
        self.__routerlifetime = valor

    def set_flag_L(self, valor):
        self.__flag_L = valor

    def set_flag_A(self, valor):
        self.__flag_A = valor

    def set_flag_R(self, valor):
        self.__flag_R = valor

    def set_validlifetime(self, valor):
        self.__validlifetime = valor

    def set_preferredlifetime(self, valor):
        self.__preferredlifetime = valor

    def set_intervalo(self, valor):
        self.__intervalo = valor

    def set_flag_chlim(self, valor):
        self.__flag_chlim = valor

    def get_flag_chlim(self):
        return int(self.__flag_chlim)

    def get_flag_L(self):
        return int(self.__flag_L)

    def get_flag_A(self):
        return int(self.__flag_A)

    def get_flag_R(self):
        return int(self.__flag_R)

    def get_validlifetime(self):
        return int(self.__validlifetime)

    def get_preferredlifetime(self):
        return int(self.__preferredlifetime)

    def get_interval(self):
        return int(self.__intervalo)

    def get_routerlifetime(self):
        return int(self.__routerlifetime)

    def set_ipv6_dst(self, valor):
        self.__ipv6_dst = valor

    def get_ipv6_dst(self):
        return self.__ipv6_dst

    def set_ipv6_src(self, valor):
        self.__ipv6_src = valor

    def get_ipv6_src(self):
        return self.__ipv6_src

    def set_ether_dst(self, valor):
        self.__ether_dst = valor

    def get_ether_dst(self):
        return self.__ether_dst

    def set_ether_src(self, valor):
        self.__ether_src = valor

    def set_ND_local_OK(self):
        self.__ND_local_OK = True

    def get_ether_src(self):
        return self.__ether_src

    def set_local_addr_ceRouter(self, valor):
        self.__local_addr_ceRouter = valor

    def get_local_addr_ceRouter(self):
        return self.__local_addr_ceRouter

    def set_tgt(self, valor):
        self.__tgt = valor

    def get_tgt(self):
        return self.__tgt

    def set_xid(self, valor):
        self.__xid = valor

    def get_xid(self):
        return self.__xid

    def set_client_duid(self, valor):
        self.__client_duid = valor

    def get_client_duid(self):
        return self.__client_duid

    def set_server_duid(self, valor):
        self.__server_duid = valor

    def get_server_duid(self):
        return self.__server_duid

    def set_iaid(self, valor):
        self.__iaid = valor

    def get_iaid(self):
        return self.__iaid

    def get_local_ping(self):
        return self.__local_ping_OK

    def get_ND_local_OK(self):
        return self.__ND_local_OK

    def get_dhcp_reconf_type(self):
        return self.__dhcp_reconf_type

    def set_dhcp_reconf_type(self, valor):
        self.__dhcp_reconf_type = valor

    def set_mac_ceRouter(self, valor):
        self.__mac_cerouter = valor

    def get_mac_ceRouter(self):
        return self.__mac_cerouter

    def get_disapproved(self):
        return self.__disapproved

    def get_lla(self):
        return self.__lla

    def set_lla(self, valor):
        self.__lla = valor

    def set_setup1_1_OK(self, valor):
        self.__setup1_1_OK = valor

    def get_udp_sport(self):
        return int(self.udp_sport)

    def set_udp_sport(self, valor):
        self.udp_sport = valor

    def set_ra2(self):
        self.__set_ra2 = True

    def get_udp_dport(self):
        return int(self.udp_dport)

    def set_udp_dport(self, valor):
        self.udp_dport = valor

    def set_pd_prefixlen(self, valor):
        self.__pd_prefixlen = valor

    def get_pd_prefixlen(self):
        return int(self.__pd_prefixlen)

    def set_dhcp_t1(self, valor):
        self.__dhcp_t1 = valor

    def set_dhcp_t2(self, valor):
        self.__dhcp_t2 = valor

    def set_dhcp_preflft(self, valor):
        self.__dhcp_preflft = valor

    def set_dhcp_plen(self, valor):
        self.__dhcp_plen = valor

    def set_dhcp_validlft(self, valor):
        self.__dhcp_validlft = valor

    def get_dhcp_t1(self):
        return int(self.__dhcp_t1)

    def get_dhcp_t2(self):
        return int(self.__dhcp_t2)

    def get_dhcp_preflft(self):
        return int(self.__dhcp_preflft)

    def get_dhcp_plen(self):
        return int(self.__dhcp_plen)

    def get_dhcp_validlft(self):
        return int(self.__dhcp_validlft)

    def active_renew_dhcp(self):
        self.__active_renew_dhcp = True

    def get_dhcp_renew_done(self):
        return self.__dhcp_renew_done

    def check_layers(self, pkt):
        #print('Check REnew')
        if pkt.haslayer(DHCP6_Renew):
            #print('====PACOTE RENEW====')
            self.__recvd_dhcp_renew = True

            if self.__active_renew_dhcp:
                self.set_mac_ceRouter(pkt[Ether].src)
                self.set_local_addr_ceRouter(pkt[IPv6].src)
                self.set_xid(pkt[DHCP6_Renew].trid)
                self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
                self.set_ipv6_dst(pkt[IPv6].src)
                self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
                self.set_ether_dst(pkt[Ether].src)
                self.__sendmsgssetup1_1.send_dhcp_reply_v2(self)
                #self.__dhcp_ok = True
                self.__dhcp_renew_done = True

        # if pkt.haslayer(ICMPv6ND_NS):

        #     self.__recvd_echo_request = True
        #     self.set_ipv6_src(self.__config.get('wan','link_local_addr'))
        #     self.set_ipv6_dst(self.get_local_addr_ceRouter())
        #     self.set_ether_src(self.__config.get('wan','link_local_mac'))
        #     self.set_ether_dst(self.get_mac_ceRouter())
        #     #self.set_tgt(self.get_local_addr_ceRouter())
        #     self.__sendmsgssetup1_1.send_echo_request(self)

        # if pkt.haslayer(ICMPv6EchoRequest):
        #     self.__recvd_echo_request = True
        #     self.set_ipv6_src(self.__config.get('wan','global_lan_addr'))
        #     self.set_ipv6_dst(pkt.[IPv6].src)
        #     self.set_ether_src(self.__config.get('wan','ra_mac'))
        #     self.set_ether_dst(pkt[Ether].src)
        #     #self.set_tgt(self.get_local_addr_ceRouter())
        #     self.__sendmsgssetup1_1.send_echo_reply(self)

    def run_setup1_1(self, pkt):

        if pkt[Ether].src == self.__config.get('wan', 'link_local_mac'):
            return
        if pkt[Ether].src == self.__config.get('wan', 'ra_mac'):
            return
        if self.__disapproved:
            return False

        if pkt.haslayer(ICMPv6EchoReply):
            #print('DESTINO IPv6:' + pkt[IPv6].dst)
            if pkt[IPv6].dst == self.__config.get('wan', 'link_local_addr'):
                #print('DESTINO IPv6 OKKKK')
                self.__local_ping_OK = True
                return

        if pkt.haslayer(ICMPv6ND_NS):
            #print('1')
            if pkt[ICMPv6ND_NS].tgt == '::':
                p  #rint('11')
                return
            if pkt[IPv6].src == self.__config.get('wan', 'link_local_addr'):
                #print('111')
                return
            if pkt[IPv6].src == self.__config.get('wan', 'global_wan_addr'):
                #print('1111')
                return
            if pkt[IPv6].src == self.__config.get('wan', 'ra_address'):
                return
            if pkt.haslayer(ICMPv6EchoRequest):
                return

            #     self.__sendmsgssetup1_1.send_icmp_na(self)

            if pkt[ICMPv6ND_NS].tgt == self.__config.get(
                    'wan', 'link_local_addr'):
                if pkt[IPv6].src == self.__config.get('wan',
                                                      'link_local_addr'):
                    return
                if pkt[IPv6].src == self.__config.get('wan',
                                                      'global_wan_addr'):
                    return
                if pkt[IPv6].src == self.__config.get('wan', 'ra_address'):
                    return
                self.set_mac_ceRouter(pkt[Ether].src)

                self.set_local_addr_ceRouter(pkt[IPv6].src)
                self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
                self.set_ipv6_dst(pkt[IPv6].src)
                self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
                self.set_ether_dst(pkt[Ether].src)
                self.set_tgt(self.__config.get('wan', 'link_local_addr'))
                #self.__sendmsgssetup1_1.send_echo_request(self)
                self.set_lla(self.__config.get('wan', 'link_local_mac'))
                # print("ENVIOU NAA")
                if not self.__local_ping_OK:
                    self.__sendmsgssetup1_1.send_icmp_na(self)
            # time.sleep(10)
            else:

                self.set_local_addr_ceRouter(pkt[ICMPv6ND_NS].tgt)
                self.set_mac_ceRouter(pkt[Ether].src)

                #print('enviou ICMP NA')

                self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
                self.set_ipv6_dst(
                    self.__config.get('multicast', 'all_nodes_addr'))
                self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
                self.set_ether_dst(
                    self.__config.get('multicast', 'all_mac_nodes'))
                self.set_tgt(self.get_local_addr_ceRouter())
                #self.__sendmsgssetup1_1.send_echo_request(self)
                self.set_lla(self.__config.get('wan', 'link_local_mac'))
                if not self.__ND_local_OK:
                    #print('nao tenho ND LOCAL OK')
                    self.__sendmsgssetup1_1.send_icmp_ns(self)

                    return

        if pkt.haslayer(ICMPv6ND_NA) and not self.__local_ping_OK:

            #self.__ND_local_OK = True
            self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
            self.set_ipv6_dst(self.get_local_addr_ceRouter())
            self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
            self.set_ether_dst(self.get_mac_ceRouter())
            #self.set_tgt(self.get_local_addr_ceRouter())
            self.__sendmsgssetup1_1.send_echo_request(self)
            self.__ND_local_OK = True
            #return
        else:
            #self.__ND_local_OK = True
            #print('enviou ICMP NS')
            if not self.__local_ping_OK:
                self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
                self.set_ipv6_dst(
                    self.__config.get('multicast', 'all_nodes_addr'))
                self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
                self.set_ether_dst(
                    self.__config.get('multicast', 'all_mac_nodes'))
                #self.set_tgt(self.get_local_addr_ceRouter())

                self.set_tgt(self.get_local_addr_ceRouter())
                #self.__sendmsgssetup1_1.send_echo_request(self)
                self.set_lla(self.__config.get('wan', 'link_local_mac'))
                self.__sendmsgssetup1_1.send_icmp_ns(self)
                #return

        if pkt.haslayer(ICMPv6ND_RS):
            if self.__local_ping_OK:
                logging.info('SEND TR1 RA 531')
                self.set_ether_src(self.__config.get('wan', 'ra_mac'))
                self.set_ether_dst(
                    self.__config.get('multicast', 'all_mac_nodes'))
                self.set_ipv6_src(self.__config.get('wan', 'ra_address'))
                self.set_ipv6_dst(
                    self.__config.get('multicast', 'all_nodes_addr'))
                #               if not self.__active_RA_no_IA_PD:
                #self.set_lla(self.__config.get('wan','ra_mac'))
                if not self.__set_ra2:
                    self.__sendmsgssetup1_1.send_tr1_RA(self)
                else:
                    print('send_RA2')
                    self.__sendmsgssetup1_1.send_tr1_RA2(self)
            else:
                self.set_local_addr_ceRouter(pkt[IPv6].src)
                self.set_mac_ceRouter(pkt[Ether].src)

    # print('PRE SOLICIT')
        if pkt.haslayer(DHCP6_Solicit) and self.__local_ping_OK:
            logging.info('SEND ADVERTISE 576')
            self.set_xid(pkt[DHCP6_Solicit].trid)
            self.set_client_duid(pkt[DHCP6OptClientId].duid)
            self.set_server_duid((self.__config.get('setup1-1_advertise',
                                                    'server_duid')))
            self.set_iaid(pkt[DHCP6OptIA_NA].iaid)
            self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
            self.set_ether_dst(pkt[Ether].src)
            self.set_ipv6_dst(pkt[IPv6].src)
            self.set_local_addr_ceRouter(pkt[IPv6].src)
            self.set_mac_ceRouter(pkt[Ether].src)

            self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
            if not self.__active_DHCP_no_IA_PD:
                self.__sendmsgssetup1_1.send_dhcp_advertise(self)
            else:
                self.__sendmsgssetup1_1.send_dhcp_advertise_no_IA_PD(self)
        elif pkt.haslayer(DHCP6_Solicit):
            self.set_local_addr_ceRouter(pkt[IPv6].src)
            self.set_mac_ceRouter(pkt[Ether].src)

        if pkt.haslayer(DHCP6_Request):
            logging.info('SEND REPLY 616')

            self.set_mac_ceRouter(pkt[Ether].src)
            self.set_local_addr_ceRouter(pkt[IPv6].src)
            self.set_xid(pkt[DHCP6_Request].trid)
            self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
            self.set_ipv6_dst(pkt[IPv6].src)
            self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
            self.set_ether_dst(pkt[Ether].src)
            self.__sendmsgssetup1_1.send_dhcp_reply(self)
            self.__dhcp_ok = True
            self.__setup1_1_OK = True
            logging.info("Common Test Setup 1.1 OK")
Beispiel #5
0
class ConfigSetup1_1:
    def __init__(self, config):
        #self.__queue_wan = Queue()
        #self.__queue_lan = Queue()
        #logging.info('self.__queue_size_inicio162')
        #logging.info(self.__queue_wan.qsize())
        self.__config = config
        self.__interface = None
        self.__pkt = None
        self.__valid = False
        self.__result = None
        self.__device_lan_tn1 = None
        self.__lan_mac_tn1 = None
        self.__ceRouter_mac_addr = None
        self.__flag_M = None
        self.__flag_O = None
        self.__flag_chlim = None
        self.__flag_L = None
        self.__flag_A = None
        self.__flag_R = None
        self.__validlifetime = None
        self.__preferredlifetime = None
        self.__interval = None
        self.__routerlifetime = None
        self.__ipv6_dst = None
        self.__ipv6_src = None
        self.__ether_src = None
        self.__ether_dst = None
        self.__xid = None
        self.__server_duid = None
        self.__client_duid = None
        self.__ND_local_OK = False
        self.__setup1_1_OK = False
        self.__local_ping_OK = False
        self.__global_ns_ok = False
        self.__dhcp_ok = False
        self.__iaid = None
        self.__flag_prf = None
        self.__disapproved = False
        self.__dhcp_reconf_type = None
        self.__local_addr_ceRouter = None
        self.__sendmsgssetup1_1 = SendMsgs(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan', 'device_wan_tr1')
        self.__wan_mac_tr1 = self.__config.get('wan', 'wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan', 'link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast',
                                                  'all_nodes_addr')
        self.__test_desc = self.__config.get('tests', '1.6.2b')

        #self.__packet_sniffer.daemon=True

    #recebe o pacote
    #packetSniffer return pkt
    def get_setup1_1_OK(self):
        return self.__setup1_1_OK

    def set_result(self, valor):
        self.__result = valor

    def get_result(self):
        return self.__result

    def send_icmpv6_ra(self, pkt):
        et = Ether(src=self.__wan_mac_tr1)  #,\
        #dst=pkt[Ether].src)
        ip = IPv6(src=self.__link_local_addr,\
                  dst=self.__all_nodes_addr)
        icmp_ra = ICMPv6ND_RA()
        sendp(et / ip / icmp_ra, iface=self.__wan_device_tr1)

    def send_echo_request_lan(self):
        et = Ether(src=self.__wan_mac_tr1,\
                   dst=self.__ceRouter_mac_addr)
        ip = IPv6(src=self.__link_local_addr,\
                  dst=self.__all_nodes_addr)
        icmp_ra = ICMPv6EchoRequest()
        sendp(et / ip / icmp_ra, iface=self.__wan_device_tr1)

    def flags_partA(self):
        self.__flag_M = self.__config.get('t1.6.2_flags_part_a', 'flag_m')
        self.__flag_O = self.__config.get('t1.6.2_flags_part_a', 'flag_o')
        self.__flag_chlim = self.__config.get('t1.6.2_flags_part_a',
                                              'flag_chlim')
        self.__flag_L = self.__config.get('t1.6.2_flags_part_a', 'flag_l')
        self.__flag_A = self.__config.get('t1.6.2_flags_part_a', 'flag_a')
        self.__flag_R = self.__config.get('t1.6.2_flags_part_a', 'flag_r')
        self.__validlifetime = self.__config.get('t1.6.2_flags_part_a',
                                                 'validlifetime')
        self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_a',
                                                     'preferredlifetime')
        self.__routerlifetime = self.__config.get('t1.6.2_flags_part_a',
                                                  'routerlifetime')
        self.__intervalo = self.__config.get('t1.6.2_flags_part_a',
                                             'intervalo')

    def flags_partB(self):
        self.__flag_M = self.__config.get('t1.6.2_flags_part_b', 'flag_m')
        self.__flag_O = self.__config.get('t1.6.2_flags_part_b', 'flag_o')
        self.__flag_chlim = self.__config.get('t1.6.2_flags_part_b',
                                              'flag_chlim')
        self.__flag_L = self.__config.get('t1.6.2_flags_part_b', 'flag_l')
        self.__flag_A = self.__config.get('t1.6.2_flags_part_b', 'flag_a')
        self.__flag_R = self.__config.get('t1.6.2_flags_part_b', 'flag_r')
        self.__validlifetime = self.__config.get('t1.6.2_flags_part_b',
                                                 'validlifetime')
        self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_b',
                                                     'preferredlifetime')
        self.__routerlifetime = self.__config.get('t1.6.2_flags_part_b',
                                                  'routerlifetime')
        self.__intervalo = self.__config.get('t1.6.2_flags_part_b',
                                             'intervalo')

    def get_flag_M(self):
        return int(self.__flag_M)

    def set_flag_M(self, valor):
        self.__flag_M = valor

    def get_flag_O(self):
        return int(self.__flag_O)

    def get_flag_prf(self):
        return int(self.__flag_prf)

    def set_flag_prf(self, valor):
        self.__flag_prf = valor

    def set_flag_0(self, valor):
        self.__flag_O = valor

    def set_routerlifetime(self, valor):
        self.__routerlifetime = valor

    def set_flag_L(self, valor):
        self.__flag_L = valor

    def set_flag_A(self, valor):
        self.__flag_A = valor

    def set_flag_R(self, valor):
        self.__flag_R = valor

    def set_validlifetime(self, valor):
        self.__validlifetime = valor

    def set_preferredlifetime(self, valor):
        self.__preferredlifetime = valor

    def set_intervalo(self, valor):
        self.__intervalo = valor

    def set_flag_chlim(self, valor):
        self.__flag_chlim = valor

    def get_flag_chlim(self):
        return int(self.__flag_chlim)

    def get_flag_L(self):
        return int(self.__flag_L)

    def get_flag_A(self):
        return int(self.__flag_A)

    def get_flag_R(self):
        return int(self.__flag_R)

    def get_validlifetime(self):
        return int(self.__validlifetime)

    def get_preferredlifetime(self):
        return int(self.__preferredlifetime)

    def get_interval(self):
        return int(self.__intervalo)

    def get_routerlifetime(self):
        return int(self.__routerlifetime)

    def set_ipv6_dst(self, valor):
        self.__ipv6_dst = valor

    def get_ipv6_dst(self):
        return self.__ipv6_dst

    def set_ipv6_src(self, valor):
        self.__ipv6_src = valor

    def get_ipv6_src(self):
        return self.__ipv6_src

    def set_ether_dst(self, valor):
        self.__ether_dst = valor

    def get_ether_dst(self):
        return self.__ether_dst

    def set_ether_src(self, valor):
        self.__ether_src = valor

    def get_ether_src(self):
        return self.__ether_src

    def set_local_addr_ceRouter(self, valor):
        self.__local_addr_ceRouter = valor

    def get_local_addr_ceRouter(self):
        return self.__local_addr_ceRouter

    def set_tgt(self, valor):
        self.__tgt = valor

    def get_tgt(self):
        return self.__tgt

    def set_xid(self, valor):
        self.__xid = valor

    def get_xid(self):
        return self.__xid

    def set_client_duid(self, valor):
        self.__client_duid = valor

    def get_client_duid(self):
        return self.__client_duid

    def set_server_duid(self, valor):
        self.__server_duid = valor

    def get_server_duid(self):
        return self.__server_duid

    def set_iaid(self, valor):
        self.__iaid = valor

    def get_iaid(self):
        return self.__iaid

    def get_local_ping(self):
        return self.__local_ping_OK

    def get_ND_local_OK(self):
        return self.__ND_local_OK

    def get_dhcp_reconf_type(self):
        return self.__dhcp_reconf_type

    def set_dhcp_reconf_type(self, valor):
        self.__dhcp_reconf_type = valor

    def set_mac_ceRouter(self, valor):
        self.__mac_cerouter = valor

    def get_mac_ceRouter(self):
        return self.__mac_cerouter

    def get_disapproved(self):
        return self.__disapproved

    def run_setup1_1(self, pkt):

        if self.__disapproved:
            return False

        if pkt.haslayer(ICMPv6ND_NS):
            if pkt[ICMPv6ND_NS].tgt == '::':
                return
            if pkt[IPv6].src == '::':
                return
            if pkt[IPv6].src == self.__config.get('wan', 'link_local_addr'):
                return
            if pkt[IPv6].src == self.__config.get('wan', 'global_wan_addr'):
                return
            if not self.__ND_local_OK:
                #self.set_ether_dst(pkt[Ether].src)
                self.set_mac_ceRouter(pkt[Ether].src)
                # print('local addr ND')
                self.set_local_addr_ceRouter(pkt[ICMPv6ND_NS].tgt)
                # print('local addr')
                # print(self.get_local_addr_ceRouter())
                # print('ether dst')
                # print(self.get_ether_dst())
                self.__ND_local_OK = True

        if self.__ND_local_OK and not self.__local_ping_OK:
            #print('send_echoreq:')
            #logging.info('send_echoreq:')
            self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
            self.set_ipv6_dst(self.get_local_addr_ceRouter())
            self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
            self.set_ether_dst(self.get_mac_ceRouter())
            self.__sendmsgssetup1_1.send_echo_request(self)
            self.__local_ping_OK = True

        if pkt.haslayer(ICMPv6ND_RS):
            if not self.__ND_local_OK:
                self.__disapproved = True
                logging.info(
                    'Reprovado Setup 1.1 - Não Recebeu ICMP_NS antes de ICMP_RS'
                )
                return False
            else:
                self.set_ether_src(self.__config.get('wan', 'ra_mac'))
                self.set_ether_dst(
                    self.__config.get('multicast', 'all_mac_nodes'))
                self.set_ipv6_src(self.__config.get('wan', 'ra_address'))
                self.set_ipv6_dst(
                    self.__config.get('multicast', 'all_nodes_addr'))
                self.__sendmsgssetup1_1.send_tr1_RA(self)

        if pkt.haslayer(DHCP6_Solicit):
            #print('send_dhcpadv:')
            #logging.info('send_dhcp_adv:')
            self.set_xid(pkt[DHCP6_Solicit].trid)
            self.set_client_duid(pkt[DHCP6OptClientId].duid)
            self.set_server_duid((self.__config.get('setup1-1_advertise',
                                                    'server_duid')))
            self.set_iaid(pkt[DHCP6OptIA_NA].iaid)
            self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
            self.set_ether_dst(self.get_mac_ceRouter())
            self.set_ipv6_dst(self.get_local_addr_ceRouter())
            # print('local addr')
            # print(self.get_local_addr_ceRouter())
            # print('ether dst')
            # print(self.get_ether_dst())
            self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))

            self.__sendmsgssetup1_1.send_dhcp_advertise(self)

        if pkt.haslayer(DHCP6_Request):
            #print('send_dhcpreply:')
            #logging.info('send_dhcp_reply:')
            self.set_ether_src(self.__config.get('wan', 'link_local_mac'))
            self.set_ether_dst(self.get_mac_ceRouter())
            self.set_ipv6_dst(self.get_local_addr_ceRouter())
            self.set_ipv6_src(self.__config.get('wan', 'link_local_addr'))
            self.__sendmsgssetup1_1.send_dhcp_reply(self)
            self.__dhcp_ok = True
            self.__setup1_1_OK = True
            logging.info("Common Test Setup 1.1 OK")

        if self.__dhcp_ok:
            #print('send_icmp_ns:')
            #logging.info('send_icmp_ns:')
            self.set_ether_src(self.__config.get('multicast', 'all_mac_nodes'))
            self.set_ether_dst(self.__config.get('wan', 'link_local_mac'))
            self.set_ipv6_dst(self.__config.get('multicast', 'all_nodes_addr'))
            self.set_ipv6_src(self.__config.get('wan', 'global_wan_addr'))
            self.set_tgt(self.__config.get('wan', 'link_local_addr'))
            self.__sendmsgssetup1_1.send_icmp_ns(self)
            self.__global_ns_ok = True

        #1 sned ping test

        if pkt.haslayer(ICMPv6EchoReply):
            #print('DESTINO IPv6:' + pkt[IPv6].dst)
            if pkt[IPv6].dst == self.__config.get('wan', 'link_local_addr'):
                #print('DESTINO IPv6 OKKKK')
                self.__local_ping_OK = True