class Test162c: def __init__(self, config): self.__queue_wan = Queue() self.__queue_lan = Queue() self.__config = config self.__interface = None self.__pkt = None self.__local_addr_ceRouter = None 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.2c') def send_echo_request_global(self): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('setup1-1_advertise', 'ia_na_address')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'link_local_mac')) self.__config_setup1_1.set_ether_dst(self.get_ether_dst()) self.__sendmsgs.send_echo_request(self.__config_setup1_1) def run(self): self.__packet_sniffer_wan = PacketSniffer('test162c', self.__queue_wan, self, self.__config, self.__wan_device_tr1) self.__config_setup1_1.flags_partB() self.__packet_sniffer_wan.start() logging.info(self.__test_desc) t_test = 0 time_over = 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.__config_setup1_1.get_setup1_1_OK(): if not self.__config_setup1_1.get_disapproved(): self.__config_setup1_1.run_setup1_1(pkt) else: self.__packet_sniffer_wan.stop() logging.info( 'Reprovado Teste 1.6.2.c - Falha em completar o Common Setup 1.1 da RFC' ) return False else: self.send_echo_request_global() if pkt.haslayer(ICMPv6EchoReply): mac_dst = pkt[Ether].dst if mac_dst == self.__config.get('wan', 'ra_mac'): self.__packet_sniffer_wan.stop() logging.info( 'Aprovado Teste 1.6.2.c: Recebido Mensagem Echo Reply com endereço Global' ) return True else: self.__packet_sniffer_wan.stop() logging.info( 'Reprovado Teste 1.6.2.c: Recebido Mensagem Echo Reply Sem endereço Global' ) return False while not self.__queue_wan.empty(): pkt = self.__queue_wan.get() self.__packet_sniffer_wan.stop() return True
class Test323a: 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.__local_addr_ceRouter = None self.__sendmsgs = SendMsgs(self.__config) self.__config_setup1_1 = ConfigSetup1_1(self.__config) #self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config) self.__wan_device_tr1 = self.__config.get('wan', 'device_wan_tr1') self.__lan_device = self.__config.get('lan', 'lan_device') 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', '3.2.3a') self.__t_lan = None self.__finish_wan = False self.part2_lan_start = False self.__dhcp_renew_done = False self.stop_ping_OK = False self.msg = self.__config.get('tests', '3.2.3a') self.msg_lan = self.__config.get('tests', '3.2.3a') self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config, self.__lan_device) def set_flags(self): self.__config_setup1_1.set_flag_M( self.__config.get('t3.2.3a', 'flag_m')) self.__config_setup1_1.set_flag_0( self.__config.get('t3.2.3a', 'flag_o')) self.__config_setup1_1.set_flag_chlim( self.__config.get('t3.2.3a', 'flag_chlim')) self.__config_setup1_1.set_flag_L( self.__config.get('t3.2.3a', 'flag_l')) self.__config_setup1_1.set_flag_A( self.__config.get('t3.2.3a', 'flag_a')) self.__config_setup1_1.set_flag_R( self.__config.get('t3.2.3a', 'flag_r')) self.__config_setup1_1.set_flag_prf( self.__config.get('t3.2.3a', 'flag_prf')) self.__config_setup1_1.set_validlifetime( self.__config.get('t3.2.3a', 'validlifetime')) self.__config_setup1_1.set_preferredlifetime( self.__config.get('t3.2.3a', 'preferredlifetime')) self.__config_setup1_1.set_routerlifetime( self.__config.get('t3.2.3a', 'routerlifetime')) self.__config_setup1_1.set_reachabletime( self.__config.get('t3.2.3a', 'reach_time')) self.__config_setup1_1.set_retranstimer( self.__config.get('t3.2.3a', 'retrans_time')) self.__config_setup1_1.set_intervalo( self.__config.get('t1.6.6b', 'intervalo')) self.__config_setup1_1.set_prefix_addr( self.__config.get('setup1-1_advertise', 'ia_pd_address')) self.__config_setup1_1.set_dhcp_t1( self.__config.get('t3.2.3a', 'dhcp_t1')) self.__config_setup1_1.set_dhcp_t2( self.__config.get('t3.2.3a', 'dhcp_t2')) self.__config_setup1_1.set_dhcp_preflft( self.__config.get('t3.2.3a', 'dhcp_preflft')) self.__config_setup1_1.set_dhcp_validlft( self.__config.get('t3.2.3a', 'dhcp_validlft')) self.__config_setup1_1.set_dhcp_plen( self.__config.get('t3.2.3a', 'dhcp_plen')) def set_flags_lan(self): self.__config_setup_lan.set_elapsetime( self.__config.get('solicitlan', 'elapsetime')) self.__config_setup_lan.set_xid(self.__config.get('solicitlan', 'xid')) self.__config_setup_lan.set_fdqn( self.__config.get('solicitlan', 'clientfqdn')) self.__config_setup_lan.set_vendor_class( self.__config.get('solicitlan', 'vendorclass')) self.__config_setup_lan.set_enterprise( self.__config.get('solicitlan', 'enterpriseid')) self.__config_setup_lan.set_client_duid( self.__config.get('solicitlan', 'duid')) self.__config_setup_lan.set_iaid( self.__config.get('solicitlan', 'iaid')) def ping_tn3(self): if self.__config_setup1_1.get_mac_ceRouter() != None: #print('6') self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac')) self.__config_setup_lan.set_ether_dst( self.__config_setup_lan.get_mac_ceRouter()) self.__config_setup_lan.set_ipv6_dst( self.__config.get('t3.2.3a', 'tn3_ip')) self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan) 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_Lan(self): t_test = 0 t_test1 = 0 time_p = 0 sent_reconfigure = False time_over = False send_ra = False send_na_lan = False reset_test1 = False self.set_flags_lan() self.__config_setup_lan.set_setup_lan_start() cache_lan = [] @self.__app.route("/LAN", methods=['GET']) def envia_lan(): return self.get_status_lan() while not self.__queue_lan.full(): if self.__queue_lan.empty(): if t_test < 30: time.sleep(1) t_test = t_test + 1 if t_test % 5 == 0: self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst( '33:33:00:01:00:02') self.__config_setup_lan.set_ipv6_dst( self.__config.get('multicast', 'all_routers_addr')) self.__config_setup_lan.set_xid( self.__config.get('informationlan', 'xid')) self.__config_setup_lan.set_elapsetime( self.__config.get('informationlan', 'elapsetime')) self.__config_setup_lan.set_vendor_class( self.__config.get('informationlan', 'vendorclass')) self.__sendmsgs.send_dhcp_information( self.__config_setup_lan) self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst( self.__config.get('multicast', 'all_mac_routers')) self.__config_setup_lan.set_ipv6_dst( self.__config.get('general', 'all_routers_address')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__sendmsgs.send_icmp_rs(self.__config_setup_lan) time.sleep(1) else: time_over = True else: pkt = self.__queue_lan.get() cache_lan.append(pkt) wrpcap("lan-3.2.3.cap", cache_lan) if pkt.haslayer(ICMPv6ND_RA): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(ICMPv6MLReport2): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Reply): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt[Ether].src == self.__config.get('lan', 'mac_address'): continue if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'global_wan_addr'): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan( self.__config_setup_lan) print('AQUI-9') if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'lan_local_addr'): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan( self.__config_setup_lan) if self.__config_setup1_1.get_setup1_1_OK(): if pkt[Ether].src == self.__config.get('lan', 'mac_address'): continue if pkt.haslayer(ICMPv6EchoRequest): logging.info( 'Reprovado Teste 2.7.3b - Recebeu ICMPv6EchoRequest de um endereço inalcançavel' ) self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = False return False if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'global_wan_addr'): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan( self.__config_setup_lan) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'lan_local_addr'): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan( self.__config_setup_lan) else: self.stop_ping_OK = True if self.part2_lan_start and not reset_test1: t_test1 = 0 reset_test1 = True def rourter_advertise(self): 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', 'ra_address')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) def ping(self): if self.__config_setup1_1.get_mac_ceRouter() != None: #print('6') self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst( self.__config_setup1_1.get_mac_ceRouter()) self.__config_setup1_1.set_ipv6_dst( self.__config.get('t3.2.2a', 'unreachable_ip')) self.__sendmsgs.send_echo_request(self.__config_setup1_1) def neighbor_advertise_local(self, pkt): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'link_local_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'link_local_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global(self, pkt): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global_tn3(self, pkt): self.__config_setup1_1.set_ipv6_src( self.__config.get('t3.2.3a', 'tn3_ip')) self.__config_setup1_1.set_ether_src( self.__config.get('t3.2.3a', 'tn3_mac')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('t3.2.3a', 'tn3_ip')) self.__config_setup1_1.set_lla(self.__config.get('t3.2.3a', 'tn3_mac')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def run(self): #self.__t_lan = Thread(target=self.run_Lan,name='LAN_Thread') #self.__t_lan.start() @self.__app.route("/WAN", methods=['GET']) def enviawan(): return self.get_status() self.__packet_sniffer_wan = PacketSniffer('Test273b-WAN', self.__queue_wan, self, self.__config, self.__wan_device_tr1) self.__packet_sniffer_wan.start() self.__packet_sniffer_lan = PacketSniffer('Test273b-LAN', self.__queue_lan, self, self.__config, self.__lan_device) #test_lan = self.__packet_sniffer_lan.start() self.__config_setup1_1.set_ra2() self.set_flags() logging.info(self.__test_desc) t_test = 0 time1 = 0 sent_reconfigure = False time_over = False start_time_count = False finish_wan = False part1_OK = False cache_wan = [] self.__config_setup1_1.set_pd_prefixlen( self.__config.get('t3.2.3a', 'pd_prefixlen')) self.__config_setup1_1.set_routerlifetime( self.__config.get('t3.2.3a', 'routerlifetime')) while not self.__queue_wan.full(): if self.__queue_wan.empty(): if t_test <= 300: time.sleep(1) t_test = t_test + 1 if t_test % 10 == 0: self.rourter_advertise() #self.ping() if start_time_count: if time1 < 600: time1 = time1 + 1 # print('imprimindo relogio') # print(time1) #if time1 % 5 == 0: #self.ping() else: time_over = True else: pkt = self.__queue_wan.get() cache_wan.append(pkt) wrpcap("WAN-3.2.4.cap", cache_wan) if not self.__config_setup1_1.get_ND_local_OK(): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): print('ND_LOCAL,continue') continue if pkt[Ether].src == self.__config.get('wan', 'ra_mac'): print('ND_LOCAL-A,continue') continue if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): print('RS,continue') continue if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): print('RS-A,continue') continue self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) #self.__config_setup1_1.set_ND_local_OK() if pkt.haslayer(DHCP6_Solicit): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): print('solicit,continue') continue if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): print('solicitA,continue') continue self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) #self.__config_setup1_1.set_ND_local_OK() if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'global_wan_addr'): self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'link_local_addr'): self.neighbor_advertise_local(pkt) #pkt = self.__queue_wan.get() if not self.__config_setup1_1.get_setup1_1_OK(): print('test1') if not self.__config_setup1_1.get_disapproved(): print('test2') self.__config_setup1_1.run_setup1_1(pkt) print('test3') if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): print('RS-2,continue') continue if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): print('RS-2A,continue') continue print('test4') #self.__config_setup1_1.set_ND_local_OK() self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter( pkt[Ether].src) 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', 'ra_address')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) self.__sendmsgs.send_tr1_RA2( self.__config_setup1_1) else: logging.info( 'Reprovado Teste 2.7.3b - Falha em completar o Common Setup 1.1 da RFC' ) self.__packet_sniffer_wan.stop() return False else: if not self.__finish_wan: start_time_count = True if time1 < 50: self.ping() if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'global_wan_addr'): print('glboal') self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'ra_address'): print('local') self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'ra_address')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'ra_mac')) self.__config_setup1_1.set_ether_dst( pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst( pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'ra_address')) self.__config_setup1_1.set_lla( self.__config.get('wan', 'ra_mac')) self.__config_setup1_1.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na( self.__config_setup1_1) if pkt.haslayer(ICMPv6DestUnreach): self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() logging.info( 'Teste 3.7.2a - APROVADO. Não passou pacotes da LAN para WAN devido ao RouterLife time estar zerado' ) return True #if time1 % 5 == 0: #self.ping() # if part1_OK == False: # if pkt.haslayer(ICMPv6EchoRequest): # #logging.info('Reprovado Teste 2.7.3a - Recebido ICMPv6EchoRequest na WAN sendo que Routerlifime anunciado é zero') # part1_OK = True # if self.part2_lan_start: # if pkt.haslayer(ICMPv6EchoRequest): # logging.info('Reprovado Teste 2.7.3a - Recebido ICMPv6EchoRequest na WAN sendo que Routerlifime anunciado é zero') # self.__packet_sniffer_wan.stop() # self.__packet_sniffer_lan.stop() # self.__finish_wan = True # self.__fail_test = False # return False # if part1_OK and not self.part2_lan_start: # print('enviado1') # self.__config_setup1_1.set_routerlifetime('0') # self.__config_setup1_1.set_reachabletime('0') # self.__config_setup1_1.set_retranstimer('0') # self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) # print('limpando') # while not self.stop_ping_OK: # time.sleep(1) # print('aguardando terminar') # time.sleep(10) # while not self.__queue_wan.empty(): # self.__queue_wan.get() # print('enviando 3') # for x in range(3): # time.sleep(1) # x = x+1 # self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) # self.part2_lan_start = True # if pkt.haslayer(ICMPv6ND_NS): # if pkt[ICMPv6ND_NS].tgt == self.__config.get('t3.2.3a','tn3_ip'): # print('glboal') # self.neighbor_advertise_global_tn3(pkt) # if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','ra_address'): # print('local') # self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','ra_address')) # self.__config_setup1_1.set_ether_src(self.__config.get('wan','ra_mac')) # self.__config_setup1_1.set_ether_dst(pkt[Ether].src) # self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) # self.__config_setup1_1.set_tgt(self.__config.get('wan','ra_address')) # self.__config_setup1_1.set_lla(self.__config.get('wan','ra_mac')) # self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) # self.__sendmsgs.send_icmp_na(self.__config_setup1_1) else: self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() logging.info( 'Teste 3.7.3 - Reprovado. Time out sem mensagem Unreacheable' ) return True else: self.__packet_sniffer_wan.stop() if self.__fail_test: return False else: return True self.__packet_sniffer_wan.stop() return False
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")
class Test323a: 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.__local_addr_ceRouter = None 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.__lan_device = self.__config.get('lan', 'lan_device') 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', '3.2.3a') self.__t_lan = None self.__finish_wan = False self.part2_lan_start = False self.__dhcp_renew_done = False self.stop_ping_OK = False self.msg_lan = self.__config.get('tests', '3.2.3a') self.msg = self.__config.get('tests', '3.2.3a') self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config, self.__lan_device) def set_flags(self): self.__config_setup1_1.set_flag_M( self.__config.get('t3.2.3a', 'flag_m')) self.__config_setup1_1.set_flag_0( self.__config.get('t3.2.3a', 'flag_o')) self.__config_setup1_1.set_flag_chlim( self.__config.get('t3.2.3a', 'flag_chlim')) self.__config_setup1_1.set_flag_L( self.__config.get('t3.2.3a', 'flag_l')) self.__config_setup1_1.set_flag_A( self.__config.get('t3.2.3a', 'flag_a')) self.__config_setup1_1.set_flag_R( self.__config.get('t3.2.3a', 'flag_r')) self.__config_setup1_1.set_flag_prf( self.__config.get('t3.2.3a', 'flag_prf')) self.__config_setup1_1.set_validlifetime( self.__config.get('t3.2.3a', 'validlifetime')) self.__config_setup1_1.set_preferredlifetime( self.__config.get('t3.2.3a', 'preferredlifetime')) self.__config_setup1_1.set_routerlifetime( self.__config.get('t3.2.3a', 'routerlifetime')) self.__config_setup1_1.set_reachabletime( self.__config.get('t3.2.3a', 'reach_time')) self.__config_setup1_1.set_retranstimer( self.__config.get('t3.2.3a', 'retrans_time')) self.__config_setup1_1.set_intervalo( self.__config.get('t1.6.6b', 'intervalo')) self.__config_setup1_1.set_prefix_addr( self.__config.get('setup1-1_advertise', 'ia_pd_address')) self.__config_setup1_1.set_dhcp_t1( self.__config.get('t3.2.3a', 'dhcp_t1')) self.__config_setup1_1.set_dhcp_t2( self.__config.get('t3.2.3a', 'dhcp_t2')) self.__config_setup1_1.set_dhcp_preflft( self.__config.get('t3.2.3a', 'dhcp_preflft')) self.__config_setup1_1.set_dhcp_validlft( self.__config.get('t3.2.3a', 'dhcp_validlft')) self.__config_setup1_1.set_dhcp_plen( self.__config.get('t3.2.3a', 'dhcp_plen')) def set_flags_lan(self): self.__config_setup_lan.set_elapsetime( self.__config.get('solicitlan', 'elapsetime')) self.__config_setup_lan.set_xid(self.__config.get('solicitlan', 'xid')) self.__config_setup_lan.set_fdqn( self.__config.get('solicitlan', 'clientfqdn')) self.__config_setup_lan.set_vendor_class( self.__config.get('solicitlan', 'vendorclass')) self.__config_setup_lan.set_enterprise( self.__config.get('solicitlan', 'enterpriseid')) self.__config_setup_lan.set_client_duid( self.__config.get('solicitlan', 'duid')) self.__config_setup_lan.set_iaid( self.__config.get('solicitlan', 'iaid')) def ping_unreac_ip(self): if self.__config_setup1_1.get_mac_ceRouter() != None: #print('6') self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac')) self.__config_setup_lan.set_ether_dst( self.__config_setup_lan.get_mac_ceRouter()) self.__config_setup_lan.set_ipv6_dst( self.__config.get('t3.2.3a', 'unreachable_ip')) self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan) 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 dhcp_information_lan(self): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst('33:33:00:01:00:02') self.__config_setup_lan.set_ipv6_dst( self.__config.get('multicast', 'all_routers_addr')) self.__config_setup_lan.set_xid( self.__config.get('informationlan', 'xid')) self.__config_setup_lan.set_elapsetime( self.__config.get('informationlan', 'elapsetime')) self.__config_setup_lan.set_vendor_class( self.__config.get('informationlan', 'vendorclass')) self.__sendmsgs.send_dhcp_information(self.__config_setup_lan) def icmp_rs_lan(self): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst( self.__config.get('multicast', 'all_mac_routers')) self.__config_setup_lan.set_ipv6_dst( self.__config.get('general', 'all_routers_address')) self.__config_setup_lan.set_lla(self.__config.get( 'lan', 'mac_address')) self.__sendmsgs.send_icmp_rs(self.__config_setup_lan) def icmp_na_global_lan(self, pkt): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_lla(self.__config.get( 'lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def icmp_na_local_lan(self, pkt): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_lla(self.__config.get( 'lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def rourter_advertise(self): 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', 'ra_address')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) def ping(self): if self.__config_setup1_1.get_mac_ceRouter() != None: self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst( self.__config_setup1_1.get_mac_ceRouter()) self.__config_setup1_1.set_ipv6_dst( self.__config.get('t3.2.3a', 'unreachable_ip')) self.__sendmsgs.send_echo_request(self.__config_setup1_1) def neighbor_advertise_local(self, pkt): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'link_local_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'link_local_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global(self, pkt): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global_tn3(self, pkt): self.__config_setup1_1.set_ipv6_src( self.__config.get('t3.2.3a', 'tn3_ip')) self.__config_setup1_1.set_ether_src( self.__config.get('t3.2.3a', 'tn3_mac')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('t3.2.3a', 'tn3_ip')) self.__config_setup1_1.set_lla(self.__config.get('t3.2.3a', 'tn3_mac')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def run_Lan(self): #self.__config_setup_lan_.flags_partA() t_test = 0 t_test1 = 0 time_p = 0 sent_reconfigure = False time_over = False send_ra = False send_na_lan = False reset_test1 = False cache_lan = [] self.set_flags_lan() self.__config_setup_lan.set_setup_lan_start() @self.__app.route("/LAN", methods=['GET']) def envia_lan(): return self.get_status_lan() while not self.__queue_lan.full(): if self.__queue_lan.empty(): if t_test < 30: time.sleep(1) t_test = t_test + 1 if t_test % 5 == 0: self.set_status_lan( 'LAN: Transmissões de RS e DHCP information por 30 s a cada 5 seg.' ) logging.info( 'LAN: Inicio das transmissões de RS e DHCP information por 30 s.' ) self.dhcp_information_lan() self.icmp_rs_lan() time.sleep(1) else: time_over = True else: pkt = self.__queue_lan.get() cache_lan.append(pkt) wrpcap("lan-3.2.3a.cap", cache_lan) if pkt.haslayer(ICMPv6ND_RA): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(ICMPv6MLReport2): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Reply): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt[Ether].src == self.__config.get('lan', 'mac_address'): continue if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'global_wan_addr'): self.icmp_na_global_lan(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'lan_local_addr'): self.icmp_na_local_lan(pkt) if self.__config_setup1_1.get_setup1_1_OK(): self.set_status_lan( 'LAN: Setup1.1 concluido. Contador de 30 para transmissão de ICMPv6 Echo Request de acordo com o Teste 3.2.2 part A' ) logging.info( 'LAN: Setup1.1 concluido. Contador de 30 s para transmissão de ICMPv6 Echo Request de acordo com o Teste 3.2.2 part A' ) if pkt[Ether].src == self.__config.get('lan', 'mac_address'): continue if t_test1 < 30: t_test1 = t_test1 + 1 if t_test1 % 5 == 0: self.set_status_lan( 'WAN: Transmissão por TN2(LAN) de ICMP Echo request a um endereço na LAN com prefixo menor do que foi delegado pelo Roteador' ) logging.info( 'WAN: Transmissão por TN2(LAN) de ICMP Echo request a um endereço com prefixo menor do que foi delegado pelo Roteador' ) self.ping_unreac_ip() if pkt.haslayer(ICMPv6DestUnreach): self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.set_status_lan( 'Teste 3.2.3a - APROVADO. Não passou pacotes da LAN para WAN ou TR1 e enviou Destino Inalcançavel ao TN2(LAN)' ) time.sleep(2) self.set_status_lan('APROVADO') logging.info( 'Teste 3.2.3a - APROVADO. Não passou pacotes da LAN para WAN ou TR1 e enviou Destino Inalcançavel ao TN2(LAN)' ) return True if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'global_wan_addr'): logging.info( 'LAN: Recebido ICMP NS Global. Enviado ICMP NA Global' ) self.set_status_lan( 'LAN: Recebido ICMP NS Global. Enviado ICMP NA Global' ) self.icmp_na_global_lan(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'lan_local_addr'): logging.info( 'LAN: Recebido ICMP NS local. Enviando ICMP NA Local' ) self.set_status_lan( 'LAN: Recebido ICMP NS local. Enviado ICMP NA local' ) self.icmp_na_local_lan(pkt) else: self.set_status_lan( 'Reprovado Teste 3.2.3a - Timeout e não recebeu ICMPv6 Destino Unreachable' ) time.sleep(2) self.set_status_lan('REPROVADO') logging.info( 'Reprovado Teste 3.2.3a - Timeout e não recebeu ICMPv6 Destino Unreachable' ) self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = False return False def run(self): @self.__app.route("/WAN", methods=['GET']) def enviawan(): return self.get_status() self.__t_lan = Thread(target=self.run_Lan, name='LAN_Thread') self.__t_lan.start() self.__packet_sniffer_wan = PacketSniffer('Test323b-WAN', self.__queue_wan, self, self.__config, self.__wan_device_tr1) self.__packet_sniffer_wan.start() self.__packet_sniffer_lan = PacketSniffer('Test323b-LAN', self.__queue_lan, self, self.__config, self.__lan_device) test_lan = self.__packet_sniffer_lan.start() self.__config_setup1_1.set_ra2() self.set_flags() logging.info(self.__test_desc) t_test = 0 time1 = 0 sent_reconfigure = False time_over = False start_time_count = False finish_wan = False part1_OK = False cache_wan = [] self.__config_setup1_1.set_pd_prefixlen( self.__config.get('t3.2.3a', 'pd_prefixlen')) self.__config_setup1_1.set_routerlifetime( self.__config.get('t3.2.3a', 'routerlifetime')) self.set_status('WAN: Tráfego Iniciado') while not self.__queue_wan.full(): if self.__queue_wan.empty(): if t_test <= 300: time.sleep(1) t_test = t_test + 1 if t_test % 10 == 0: self.set_status( 'WAN: Transmissão de ICMP RA periódico') logging.info('WAN: Transmissão de ICMP RA periódico') self.rourter_advertise() if start_time_count: time1 = time1 + 1 else: time_over = True else: pkt = self.__queue_wan.get() cache_wan.append(pkt) wrpcap("WAN-3.2.3a.cap", cache_wan) if not self.__config_setup1_1.get_ND_local_OK(): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan', 'ra_mac'): continue if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): continue if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Solicit): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): continue if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(ICMPv6ND_NS): self.set_status( 'WAN: Respondendo ao ICMP NS local. Enviado ICMP NA Global' ) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'global_wan_addr'): self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'link_local_addr'): self.set_status( 'WAN: Respondendo ao ICMP NS local. Enviado ICMP NA local' ) self.neighbor_advertise_local(pkt) if not self.__config_setup1_1.get_setup1_1_OK(): self.set_status('WAN: Setup 1.1 em execução') if not self.__config_setup1_1.get_disapproved(): self.__config_setup1_1.run_setup1_1(pkt) if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): continued if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter( pkt[Ether].src) 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', 'ra_address')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) self.__sendmsgs.send_tr1_RA2( self.__config_setup1_1) else: self.set_status( 'Reprovado Teste 3.2.3a - Falha em completar o Common Setup 1.1 da RFC' ) time.sleep(2) self.set_status('REPROVADO') logging.info( 'Reprovado Teste 3.2.3a - Falha em completar o Common Setup 1.1 da RFC' ) self.__packet_sniffer_wan.stop() return False else: if not self.__finish_wan: start_time_count = True if time1 < 50: if pkt.haslayer(ICMPv6EchoRequest): self.set_status( 'Reprovado Teste 3.2.3a - Recebeu ICMPv6EchoRequest na LAN de um endereço não designado a LAN pelo roteador' ) time.sleep(2) self.set_status('REPROVADO') logging.info( 'Reprovado Teste 3.2.3a - Recebeu ICMPv6EchoRequest na LAN de um endereço não designado a LAN pelo roteador' ) self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = False return False if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'global_wan_addr'): self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'ra_address'): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'ra_address')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'ra_mac')) self.__config_setup1_1.set_ether_dst( pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst( pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'ra_address')) self.__config_setup1_1.set_lla( self.__config.get('wan', 'ra_mac')) self.__config_setup1_1.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na( self.__config_setup1_1) else: self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.set_status( 'Teste 3.2.3a - Reprovado. Time out sem mensagem Unreacheable' ) time.sleep(2) self.set_status('REPROVADO') logging.info( 'Teste 3.2.3a - Reprovado. Time out sem mensagem Unreacheable' ) return True else: self.__packet_sniffer_wan.stop() if self.__fail_test: return False else: return True self.__packet_sniffer_wan.stop() return False
class Test321b: def __init__(self,config): self.__queue_wan = Queue() self.__queue_lan = Queue() self.__config = config self.__interface = None self.__pkt = None self.__local_addr_ceRouter =None self.__sendmsgs = SendMsgs(self.__config) self.__config_setup1_1 = ConfigSetup1_1(self.__config) #self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config) self.__wan_device_tr1 = self.__config.get('wan','device_wan_tr1') self.__lan_device = self.__config.get('lan','lan_device') 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','3.2.1b') self.__t_lan = None self.__finish_wan = False self.__dhcp_renew_done = False self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config,self.__lan_device) def set_flags(self): self.__config_setup1_1.set_flag_M(self.__config.get('t3.2.1b','flag_m')) self.__config_setup1_1.set_flag_0(self.__config.get('t3.2.1b','flag_o')) self.__config_setup1_1.set_flag_chlim(self.__config.get('t3.2.1b','flag_chlim')) self.__config_setup1_1.set_flag_L(self.__config.get('t3.2.1b','flag_l')) self.__config_setup1_1.set_flag_A(self.__config.get('t3.2.1b','flag_a')) self.__config_setup1_1.set_flag_R(self.__config.get('t3.2.1b','flag_r')) self.__config_setup1_1.set_flag_prf(self.__config.get('t3.2.1b','flag_prf')) self.__config_setup1_1.set_validlifetime(self.__config.get('t3.2.1b','validlifetime')) self.__config_setup1_1.set_preferredlifetime(self.__config.get('t3.2.1b','preferredlifetime')) self.__config_setup1_1.set_routerlifetime(self.__config.get('t3.2.1b','routerlifetime')) self.__config_setup1_1.set_reachabletime(self.__config.get('t3.2.1b','reach_time')) self.__config_setup1_1.set_retranstimer(self.__config.get('t3.2.1b','retrans_time')) self.__config_setup1_1.set_intervalo(self.__config.get('t1.6.6b','intervalo')) self.__config_setup1_1.set_prefix_addr(self.__config.get('setup1-1_advertise','ia_pd_address')) self.__config_setup1_1.set_dhcp_t1(self.__config.get('t3.2.1b','dhcp_t1')) self.__config_setup1_1.set_dhcp_t2(self.__config.get('t3.2.1b','dhcp_t2')) self.__config_setup1_1.set_dhcp_preflft(self.__config.get('t3.2.1b','dhcp_preflft')) self.__config_setup1_1.set_dhcp_validlft(self.__config.get('t3.2.1b','dhcp_validlft')) self.__config_setup1_1.set_dhcp_plen(self.__config.get('t3.2.1b','dhcp_plen')) def set_flags_lan(self): self.__config_setup_lan.set_elapsetime(self.__config.get('solicitlan','elapsetime')) self.__config_setup_lan.set_xid(self.__config.get('solicitlan','xid')) self.__config_setup_lan.set_fdqn(self.__config.get('solicitlan','clientfqdn')) self.__config_setup_lan.set_vendor_class(self.__config.get('solicitlan','vendorclass')) self.__config_setup_lan.set_enterprise(self.__config.get('solicitlan','enterpriseid')) self.__config_setup_lan.set_client_duid(self.__config.get('solicitlan','duid')) self.__config_setup_lan.set_iaid(self.__config.get('solicitlan','iaid')) def run_Lan(self): #self.__config_setup_lan_.flags_partA() logging.info('Thread da LAN inicio') t_test = 0 t_test1= 0 time_p = 0 sent_reconfigure = False time_over = False send_ra = False send_na_lan = False self.set_flags_lan() self.__config_setup_lan.set_setup_lan_start() while not self.__queue_lan.full(): if self.__queue_lan.empty(): if t_test < 30: time.sleep(1) t_test = t_test + 1 if t_test % 5 ==0: #print('0') #print('ENVIO RS - 1 LAN') self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst('33:33:00:01:00:02') self.__config_setup_lan.set_ipv6_dst(self.__config.get('multicast','all_routers_addr')) self.__config_setup_lan.set_xid(self.__config.get('informationlan','xid')) #self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_elapsetime(self.__config.get('informationlan','elapsetime')) self.__config_setup_lan.set_vendor_class(self.__config.get('informationlan','vendorclass')) self.__sendmsgs.send_dhcp_information(self.__config_setup_lan) #self.__config_setup_lan.set_setup_lan_start() self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(self.__config.get('multicast','all_mac_routers')) self.__config_setup_lan.set_ipv6_dst(self.__config.get('general','all_routers_address')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__sendmsgs.send_icmp_rs(self.__config_setup_lan) # if self.__config_setup_lan.get_mac_ceRouter() != None: # #print('6') # self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr')) # self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) # self.__config_setup_lan.set_ether_dst(self.__config_setup_lan.get_mac_ceRouter()) # self.__config_setup_lan.set_ipv6_dst(self.__config.get('wan','global_wan_addr')) # self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan) # self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) # self.__config_setup_lan.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) # self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) # self.__config_setup_lan.set_ether_dst(self.__config.get('multicast','all_mac_nodes')) # #self.set_tgt(self.get_local_addr_ceRouter()) # self.__config_setup_lan.set_tgt(self.__config.get('wan','link_local_addr')) # #self.__sendmsgssetup1_1.send_echo_request(self) # self.__config_setup_lan.set_lla(self.__config.get('wan','link_local_mac')) # self.__sendmsgs.send_icmp_ns_lan(self.__config_setup_lan) #print('1') logging.info('Thread da LAN time') time.sleep(1) else: time_over = True # t_test = t_test + 1 # if self.__config_setup1_1.get_recvd_dhcp_renew(): #pkt = self.__queue_lan.get() else: print('AQUI-1') pkt = self.__queue_lan.get() print('AQUI-2') if not time_over: if pkt.haslayer(ICMPv6EchoRequest): print('AQUI-2.0') self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = True return False print('AQUI-3') if pkt.haslayer(ICMPv6ND_RA): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) print('AQUI-4') if pkt.haslayer(ICMPv6MLReport2): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) print('AQUI-5') if pkt.haslayer(DHCP6_Reply): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt[Ether].src == self.__config.get('lan','mac_address'): continue print('AQUI-6') if pkt.haslayer(ICMPv6ND_NS): print('AQUI-7') if pkt.haslayer(ICMPv6EchoRequest): logging.info('Reprovado Teste 2.7.3b - Recebeu ICMPv6EchoRequest antes do IP_PD ser fornecido à porta WAN do roteador') self.__packet_sniffer_wan.stop() return False #print('AQUI-2.0') self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = False return False print('AQUI-8') if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','global_wan_addr'): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) print('AQUI-9') if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','lan_local_addr'): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) if self.__config_setup1_1.get_setup1_1_OK(): if pkt[Ether].src == self.__config.get('lan','mac_address'): continue if pkt.haslayer(ICMPv6EchoRequest): logging.info('Aprovado Teste 2.7.3b - Recebeu ICMPv6EchoRequest Apos do IP_PD ser fornecido à porta WAN do roteador') self.__packet_sniffer_wan.stop() return False #print('AQUI-2.0') self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = False return False if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','global_wan_addr'): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','lan_local_addr'): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def rourter_advertise(self): 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','ra_address')) self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) self.__sendmsgs.send_tr1_RA(self.__config_setup1_1) def ping(self): if self.__config_setup1_1.get_mac_ceRouter() != None: #print('6') self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(self.__config_setup1_1.get_mac_ceRouter()) self.__config_setup1_1.set_ipv6_dst(self.__config.get('lan','global_wan_addr')) self.__sendmsgs.send_echo_request(self.__config_setup1_1) def neighbor_advertise_local(self,pkt): self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','link_local_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global(self,pkt): self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def run(self): self.__t_lan = Thread(target=self.run_Lan,name='LAN_Thread') self.__t_lan.start() self.__packet_sniffer_wan = PacketSniffer('Test273b-WAN',self.__queue_wan,self,self.__config,self.__wan_device_tr1) self.__packet_sniffer_wan.start() self.__packet_sniffer_lan = PacketSniffer('Test273b-LAN',self.__queue_lan,self,self.__config,self.__lan_device) test_lan = self.__packet_sniffer_lan.start() self.__config_setup1_1.set_ra2() self.set_flags() logging.info(self.__test_desc) t_test = 0 time1 = 0 sent_reconfigure = False time_over = False finish_wan = True self.__config_setup1_1.set_pd_prefixlen(self.__config.get('t3.2.1b','pd_prefixlen')) self.__config_setup1_1.set_routerlifetime(self.__config.get('t3.2.1b','routerlifetime')) while not self.__queue_wan.full(): if self.__queue_wan.empty(): if t_test <= 50: time.sleep(1) t_test = t_test + 1 if t_test % 10 == 0: #self.rourter_advertise() self.ping() else: time_over = True else: pkt = self.__queue_wan.get() if not self.__config_setup1_1.get_ND_local_OK(): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): print('ND_LOCAL,continue') continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): print('ND_LOCAL-A,continue') continue if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): print('RS,continue') continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): print('RS-A,continue') continue self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) #self.__config_setup1_1.set_ND_local_OK() if pkt.haslayer(DHCP6_Solicit): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): print('solicit,continue') continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): print('solicitA,continue') continue self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) #self.__config_setup1_1.set_ND_local_OK() if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','global_wan_addr'): self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','link_local_addr'): self.neighbor_advertise_local(pkt) if time_over: print('time-over') #pkt = self.__queue_wan.get() if not self.__config_setup1_1.get_setup1_1_OK(): print('test1') if not self.__config_setup1_1.get_disapproved(): print('test2') self.__config_setup1_1.run_setup1_1(pkt) print('test3') if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): print('RS-2,continue') continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): print('RS-2A,continue') continue print('test4') #self.__config_setup1_1.set_ND_local_OK() self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) 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','ra_address')) self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) self.__sendmsgs.send_tr1_RA(self.__config_setup1_1) else: logging.info('Reprovado Teste 2.7.3b - Falha em completar o Common Setup 1.1 da RFC') self.__packet_sniffer_wan.stop() return False else: if not self.__finish_wan: if time1 < 30: time1 = time1 + 1 if time1 % 5 == 0: self.ping() if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','global_wan_addr'): print('glboal') self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','ra_address'): print('local') self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','ra_address')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','ra_mac')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','ra_address')) self.__config_setup1_1.set_lla(self.__config.get('wan','ra_mac')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) ##print('LOOP NS') # ##print(pkt[ICMPv6ND_NS].tgt) # self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','global_wan_addr')) # self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) # self.__config_setup1_1.set_ether_dst(pkt[Ether].src) # self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) # self.__config_setup1_1.set_tgt(self.__config.get('wan','global_wan_addr')) # self.__config_setup1_1.set_lla(self.__config.get('wan','wan_mac_tr1')) # self.__sendmsgs.send_icmp_na(self.__config_setup1_1) else: self.__packet_sniffer_wan.stop() if self.__fail_test: return False else: return True self.__packet_sniffer_wan.stop() return False
class Test321b: 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.__local_addr_ceRouter = None self.__sendmsgs = SendMsgs(self.__config) self.__config_setup1_1 = ConfigSetup1_1(self.__config) #self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config) self.__wan_device_tr1 = self.__config.get('wan', 'device_wan_tr1') self.__lan_device = self.__config.get('lan', 'lan_device') 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', '3.2.1b') self.__t_lan = None self.__finish_wan = False self.__dhcp_renew_done = False self.msg = self.__config.get('tests', '3.2.1b') self.msg_lan = self.__config.get('tests', '3.2.1b') self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config, self.__lan_device) def set_flags(self): self.__config_setup1_1.set_flag_M( self.__config.get('t3.2.1b', 'flag_m')) self.__config_setup1_1.set_flag_0( self.__config.get('t3.2.1b', 'flag_o')) self.__config_setup1_1.set_flag_chlim( self.__config.get('t3.2.1b', 'flag_chlim')) self.__config_setup1_1.set_flag_L( self.__config.get('t3.2.1b', 'flag_l')) self.__config_setup1_1.set_flag_A( self.__config.get('t3.2.1b', 'flag_a')) self.__config_setup1_1.set_flag_R( self.__config.get('t3.2.1b', 'flag_r')) self.__config_setup1_1.set_flag_prf( self.__config.get('t3.2.1b', 'flag_prf')) self.__config_setup1_1.set_validlifetime( self.__config.get('t3.2.1b', 'validlifetime')) self.__config_setup1_1.set_preferredlifetime( self.__config.get('t3.2.1b', 'preferredlifetime')) self.__config_setup1_1.set_routerlifetime( self.__config.get('t3.2.1b', 'routerlifetime')) self.__config_setup1_1.set_reachabletime( self.__config.get('t3.2.1b', 'reach_time')) self.__config_setup1_1.set_retranstimer( self.__config.get('t3.2.1b', 'retrans_time')) self.__config_setup1_1.set_intervalo( self.__config.get('t1.6.6b', 'intervalo')) self.__config_setup1_1.set_prefix_addr( self.__config.get('setup1-1_advertise', 'ia_pd_address')) self.__config_setup1_1.set_dhcp_t1( self.__config.get('t3.2.1b', 'dhcp_t1')) self.__config_setup1_1.set_dhcp_t2( self.__config.get('t3.2.1b', 'dhcp_t2')) self.__config_setup1_1.set_dhcp_preflft( self.__config.get('t3.2.1b', 'dhcp_preflft')) self.__config_setup1_1.set_dhcp_validlft( self.__config.get('t3.2.1b', 'dhcp_validlft')) self.__config_setup1_1.set_dhcp_plen( self.__config.get('t3.2.1b', 'dhcp_plen')) def set_flags_lan(self): self.__config_setup_lan.set_elapsetime( self.__config.get('solicitlan', 'elapsetime')) self.__config_setup_lan.set_xid(self.__config.get('solicitlan', 'xid')) self.__config_setup_lan.set_fdqn( self.__config.get('solicitlan', 'clientfqdn')) self.__config_setup_lan.set_vendor_class( self.__config.get('solicitlan', 'vendorclass')) self.__config_setup_lan.set_enterprise( self.__config.get('solicitlan', 'enterpriseid')) self.__config_setup_lan.set_client_duid( self.__config.get('solicitlan', 'duid')) self.__config_setup_lan.set_iaid( self.__config.get('solicitlan', 'iaid')) 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 rourter_advertise(self): 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', 'ra_address')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) self.__sendmsgs.send_tr1_RA(self.__config_setup1_1) def ping(self): if self.__config_setup1_1.get_mac_ceRouter() != None: #print('6') self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst( self.__config_setup1_1.get_mac_ceRouter()) self.__config_setup1_1.set_ipv6_dst( self.__config.get('lan', 'global_wan_addr')) self.__sendmsgs.send_echo_request(self.__config_setup1_1) def neighbor_advertise_local(self, pkt): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'link_local_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'link_local_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global(self, pkt): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def dhcp_information_lan(self): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst('33:33:00:01:00:02') self.__config_setup_lan.set_ipv6_dst( self.__config.get('multicast', 'all_routers_addr')) self.__config_setup_lan.set_xid( self.__config.get('informationlan', 'xid')) self.__config_setup_lan.set_elapsetime( self.__config.get('informationlan', 'elapsetime')) self.__config_setup_lan.set_vendor_class( self.__config.get('informationlan', 'vendorclass')) self.__sendmsgs.send_dhcp_information(self.__config_setup_lan) def icmp_rs_lan(self): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst( self.__config.get('multicast', 'all_mac_routers')) self.__config_setup_lan.set_ipv6_dst( self.__config.get('general', 'all_routers_address')) self.__config_setup_lan.set_lla(self.__config.get( 'lan', 'mac_address')) self.__sendmsgs.send_icmp_rs(self.__config_setup_lan) def icmp_na_global_lan(self, pkt): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_lla(self.__config.get( 'lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def icmp_na_local_lan(self, pkt): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_lla(self.__config.get( 'lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def run_Lan(self): t_test = 0 t_test1 = 0 time_p = 0 sent_reconfigure = False time_over = False send_ra = False send_na_lan = False self.set_flags_lan() self.__config_setup_lan.set_setup_lan_start() cache_lan = [] @self.__app.route("/LAN", methods=['GET']) def envia_lan(): return self.get_status_lan() while not self.__queue_lan.full(): if self.__queue_lan.empty(): if t_test < 30: time.sleep(1) t_test = t_test + 1 if t_test % 5 == 0: self.set_status_lan( 'LAN: Transmissões de RS e DHCP information por 30 s a cada 5 seg. EXECUTAR APOS ROTEADOR REINICIADO' ) logging.info( 'LAN: Inicio das transmissões de RS e DHCP information por 30 s.' ) self.dhcp_information_lan() self.icmp_rs_lan() else: time_over = True else: pkt = self.__queue_lan.get() cache_lan.append(pkt) wrpcap("lan-3.2.1b.cap", cache_lan) if not time_over: if pkt.haslayer(ICMPv6EchoRequest): self.set_status_lan( 'Reprovado Teste 3.2.1b - Recebeu ICMPv6EchoRequest na LAN antes do IP_PD ser fornecido à porta WAN do roteador' ) time.sleep(2) self.set_status_lan( 'REPROVADO' ) # Mensagem padrão para o frontEnd atualizar Status logging.info( 'Reprovado Teste 3.2.1b - Recebeu ICMPv6EchoRequest antes do IP_PD ser fornecido à porta WAN do roteador' ) self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = True return False if pkt.haslayer(ICMPv6ND_RA): self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) if pkt.haslayer(ICMPv6MLReport2): self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) if pkt.haslayer(DHCP6_Reply): self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) if pkt[Ether].src == self.__config.get( 'lan', 'mac_address'): continue if pkt.haslayer(ICMPv6ND_NS): if pkt.haslayer(ICMPv6EchoRequest): self.set_status_lan( 'Reprovado Teste 3.2.1b - Recebeu ICMPv6EchoRequest na LAN antes do IP_PD ser fornecido à porta WAN do roteador' ) time.sleep(2) self.set_status_lan( 'REPROVADO' ) # Mensagem padrão para o frontEnd atualizar Status logging.info( 'Reprovado Teste 3.2.1b - Recebeu ICMPv6EchoRequest antes do IP_PD ser fornecido à porta WAN do roteador' ) self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = True return False if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'global_wan_addr'): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst( pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan( self.__config_setup_lan) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'lan_local_addr'): self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst( pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan( self.__config_setup_lan) if self.__config_setup1_1.get_setup1_1_OK(): if pkt[Ether].src == self.__config.get( 'lan', 'mac_address'): continue if pkt.haslayer(ICMPv6EchoRequest): self.set_status_lan( 'Aprovado Teste 3.2.1b - Recebeu ICMPv6EchoRequest somente Apos do IP_PD ser fornecido à porta WAN do roteador' ) time.sleep(2) self.set_status_lan( 'APROVADO' ) # Mensagem padrão para o frontEnd atualizar Status logging.info( 'Aprovado Teste 3.2.1b - Recebeu ICMPv6EchoRequest somente Apos do IP_PD ser fornecido à porta WAN do roteador' ) self.__packet_sniffer_wan.stop() return False #print('AQUI-2.0') self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = False return False if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'global_wan_addr'): self.set_status_lan( 'LAN: Setup 1.1 Concluido. Respondendo ao NS Global com NA global' ) logging.info( 'LAN: Setup 1.1 Concluido. Respondendo ao NS Global com NA global' ) self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst( pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'global_wan_addr')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan( self.__config_setup_lan) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'lan', 'lan_local_addr'): self.set_status_lan( 'LAN: Setup 1.1 Concluido. Respondendo ao NS local com NA local' ) logging.info( 'LAN: Setup 1.1 Concluido. Respondendo ao NS local com NA local' ) self.__config_setup_lan.set_ipv6_src( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_ether_src( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_ether_dst( pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt( self.__config.get('lan', 'lan_local_addr')) self.__config_setup_lan.set_lla( self.__config.get('lan', 'mac_address')) self.__config_setup_lan.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan( self.__config_setup_lan) def run(self): @self.__app.route("/WAN", methods=['GET']) def enviawan(): return self.get_status() self.__t_lan = Thread(target=self.run_Lan, name='LAN_Thread') self.__t_lan.start() self.__packet_sniffer_wan = PacketSniffer('Test273b-WAN', self.__queue_wan, self, self.__config, self.__wan_device_tr1) self.__packet_sniffer_wan.start() self.__packet_sniffer_lan = PacketSniffer('Test273b-LAN', self.__queue_lan, self, self.__config, self.__lan_device) test_lan = self.__packet_sniffer_lan.start() self.__config_setup1_1.set_ra2() self.set_flags() logging.info(self.__test_desc) t_test = 0 time1 = 0 sent_reconfigure = False time_over = False cache_wan = [] finish_wan = True self.__config_setup1_1.set_pd_prefixlen( self.__config.get('t3.2.1b', 'pd_prefixlen')) self.__config_setup1_1.set_routerlifetime( self.__config.get('t3.2.1b', 'routerlifetime')) while not self.__queue_wan.full(): if self.__queue_wan.empty(): if t_test <= 50: time.sleep(1) t_test = t_test + 1 if t_test % 10 == 0: #self.rourter_advertise() self.ping() self.set_status('LAN: Enviando ping Para TN2') logging.info('LAN: Enviando ping TN2') else: time_over = True else: pkt = self.__queue_wan.get() cache_wan.append(pkt) wrpcap("WAN-3.2.1b.cap", cache_wan) if not self.__config_setup1_1.get_ND_local_OK(): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan', 'ra_mac'): continue if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): continue if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Solicit): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): continue if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'global_wan_addr'): self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'link_local_addr'): self.neighbor_advertise_local(pkt) if time_over: if not self.__config_setup1_1.get_setup1_1_OK(): self.set_status('WAN: Setup 1.1 em execução') logging.info('WAN: Setup 1.1 em execução') if not self.__config_setup1_1.get_disapproved(): self.__config_setup1_1.run_setup1_1(pkt) if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get( 'wan', 'link_local_mac'): continue if pkt[Ether].src == self.__config.get( 'wan', 'ra_mac'): continue self.set_status('WAN: Enviando ICMP RA') logging.info('WAN: Enviando ICMP RA') self.__config_setup1_1.set_local_addr_ceRouter( pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter( pkt[Ether].src) 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', 'ra_address')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) self.__sendmsgs.send_tr1_RA( self.__config_setup1_1) else: self.set_status( 'Reprovado Teste 3.2.1b - Falha em completar o Common Setup 1.1 da RFC' ) time.sleep(2) self.set_status( 'REPROVADO' ) # Mensagem padrão para o frontEnd atualizar Status logging.info( 'Reprovado Teste 3.2.1b - Falha em completar o Common Setup 1.1 da RFC' ) self.__packet_sniffer_wan.stop() return False else: if not self.__finish_wan: if time1 < 30: time1 = time1 + 1 if time1 % 5 == 0: self.ping() self.set_status( 'WAN: Setup 1.1 Concluido Enviando Echo Request' ) logging.info( 'WAN: Setup 1.1 Concluido Enviando Echo Request' ) if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'global_wan_addr'): self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'ra_address'): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'ra_address')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'ra_mac')) self.__config_setup1_1.set_ether_dst( pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst( pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'ra_address')) self.__config_setup1_1.set_lla( self.__config.get('wan', 'ra_mac')) self.__config_setup1_1.set_mac_ceRouter( pkt[Ether].src) self.__sendmsgs.send_icmp_na( self.__config_setup1_1) else: self.__packet_sniffer_wan.stop() if self.__fail_test: return False else: return True self.__packet_sniffer_wan.stop() return False
class Test322b: 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.__local_addr_ceRouter =None self.__sendmsgs = SendMsgs(self.__config) self.__config_setup1_1 = ConfigSetup1_1(self.__config) #self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config) self.__wan_device_tr1 = self.__config.get('wan','device_wan_tr1') self.__lan_device = self.__config.get('lan','lan_device') 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','3.2.2b') self.__t_lan = None self.__finish_wan = False self.part2_lan_start = False self.__dhcp_renew_done = False self.stop_ping_OK = False self.msg = self.__config.get('tests','3.2.2b') self.msg_lan =self.__config.get('tests','3.2.2b') self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config,self.__lan_device) def set_flags(self): self.__config_setup1_1.set_flag_M(self.__config.get('t3.2.2b','flag_m')) self.__config_setup1_1.set_flag_0(self.__config.get('t3.2.2b','flag_o')) self.__config_setup1_1.set_flag_chlim(self.__config.get('t3.2.2b','flag_chlim')) self.__config_setup1_1.set_flag_L(self.__config.get('t3.2.2b','flag_l')) self.__config_setup1_1.set_flag_A(self.__config.get('t3.2.2b','flag_a')) self.__config_setup1_1.set_flag_R(self.__config.get('t3.2.2b','flag_r')) self.__config_setup1_1.set_flag_prf(self.__config.get('t3.2.2b','flag_prf')) self.__config_setup1_1.set_validlifetime(self.__config.get('t3.2.2b','validlifetime')) self.__config_setup1_1.set_preferredlifetime(self.__config.get('t3.2.2b','preferredlifetime')) self.__config_setup1_1.set_routerlifetime(self.__config.get('t3.2.2b','routerlifetime')) self.__config_setup1_1.set_reachabletime(self.__config.get('t3.2.2b','reach_time')) self.__config_setup1_1.set_retranstimer(self.__config.get('t3.2.2b','retrans_time')) self.__config_setup1_1.set_intervalo(self.__config.get('t1.6.6b','intervalo')) self.__config_setup1_1.set_prefix_addr(self.__config.get('setup1-1_advertise','ia_pd_address')) self.__config_setup1_1.set_dhcp_t1(self.__config.get('t3.2.2b','dhcp_t1')) self.__config_setup1_1.set_dhcp_t2(self.__config.get('t3.2.2b','dhcp_t2')) self.__config_setup1_1.set_dhcp_preflft(self.__config.get('t3.2.2b','dhcp_preflft')) self.__config_setup1_1.set_dhcp_validlft(self.__config.get('t3.2.2b','dhcp_validlft')) self.__config_setup1_1.set_dhcp_plen(self.__config.get('t3.2.2b','dhcp_plen')) def set_flags_lan(self): self.__config_setup_lan.set_elapsetime(self.__config.get('solicitlan','elapsetime')) self.__config_setup_lan.set_xid(self.__config.get('solicitlan','xid')) self.__config_setup_lan.set_fdqn(self.__config.get('solicitlan','clientfqdn')) self.__config_setup_lan.set_vendor_class(self.__config.get('solicitlan','vendorclass')) self.__config_setup_lan.set_enterprise(self.__config.get('solicitlan','enterpriseid')) self.__config_setup_lan.set_client_duid(self.__config.get('solicitlan','duid')) self.__config_setup_lan.set_iaid(self.__config.get('solicitlan','iaid')) 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 rourter_advertise(self): 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','ra_address')) self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) def ping(self): if self.__config_setup1_1.get_mac_ceRouter() != None: self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(self.__config_setup1_1.get_mac_ceRouter()) self.__config_setup1_1.set_ipv6_dst(self.__config.get('lan','global_wan_addr')) self.__sendmsgs.send_echo_request(self.__config_setup1_1) def neighbor_advertise_local(self,pkt): self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','link_local_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global(self,pkt): self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global_tn3(self,pkt): self.__config_setup1_1.set_ipv6_src(self.__config.get('t3.2.2b','tn3_ip')) self.__config_setup1_1.set_ether_src(self.__config.get('t3.2.2b','tn3_mac')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('t3.2.2b','tn3_ip')) self.__config_setup1_1.set_lla(self.__config.get('t3.2.2b','tn3_mac')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def ping_tn3(self): if self.__config_setup1_1.get_mac_ceRouter() != None: #print('6') self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac')) self.__config_setup_lan.set_ether_dst(self.__config_setup_lan.get_mac_ceRouter()) self.__config_setup_lan.set_ipv6_dst(self.__config.get('t3.2.2b','tn3_ip')) self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan) def dhcp_information_lan(self): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst('33:33:00:01:00:02') self.__config_setup_lan.set_ipv6_dst(self.__config.get('multicast','all_routers_addr')) self.__config_setup_lan.set_xid(self.__config.get('informationlan','xid')) self.__config_setup_lan.set_elapsetime(self.__config.get('informationlan','elapsetime')) self.__config_setup_lan.set_vendor_class(self.__config.get('informationlan','vendorclass')) self.__sendmsgs.send_dhcp_information(self.__config_setup_lan) def icmp_rs_lan(self): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(self.__config.get('multicast','all_mac_routers')) self.__config_setup_lan.set_ipv6_dst(self.__config.get('general','all_routers_address')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__sendmsgs.send_icmp_rs(self.__config_setup_lan) def icmp_na_global_lan(self,pkt): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def icmp_na_local_lan(self,pkt): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def run_Lan(self): #self.__config_setup_lan_.flags_partA() t_test = 0 t_test1= 0 time_p = 0 sent_reconfigure = False time_over = False send_ra = False send_na_lan = False reset_test1 = False self.set_flags_lan() self.__config_setup_lan.set_setup_lan_start() cache_lan = [] @self.__app.route("/LAN",methods=['GET']) def envia_lan(): return self.get_status_lan() while not self.__queue_lan.full(): if self.__queue_lan.empty(): if t_test < 30: time.sleep(1) t_test = t_test + 1 if t_test % 5 ==0: self.set_status_lan('LAN: Transmissões de RS e DHCP information por 30 s a cada 5 seg.') logging.info('LAN: Inicio das transmissões de RS e DHCP information por 30 s.') self.dhcp_information_lan() self.icmp_rs_lan() time.sleep(1) else: time_over = True else: pkt = self.__queue_lan.get() cache_lan.append(pkt) wrpcap("lan-3.2.2b.cap",cache_lan) if pkt.haslayer(ICMPv6ND_RA): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(ICMPv6MLReport2): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Reply): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt[Ether].src == self.__config.get('lan','mac_address'): continue if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','global_wan_addr'): self.set_status_lan('LAN: Respondendo ao NS com NA global') logging.info('LAN: Respondendo ao NS com NA global') self.icmp_na_global_lan(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','lan_local_addr'): self.set_status_lan('LAN: Respondendo ao NS com NA local') logging.info('LAN: Respondendo ao NS com NA local') self.icmp_na_local_lan(pkt) if self.__config_setup1_1.get_setup1_1_OK(): if pkt[Ether].src == self.__config.get('lan','mac_address'): continue if t_test1 < 30: t_test1 = t_test1 + 1 if t_test1 % 5 == 0: self.ping_tn3() self.set_status_lan('LAN: Enviando ping TN3') logging.info('LAN: Enviando ping TN3') if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','global_wan_addr'): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','lan_local_addr'): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) else: self.stop_ping_OK = True if self.part2_lan_start and not reset_test1: t_test1 = 0 reset_test1 = True def run(self): @self.__app.route("/WAN",methods=['GET']) def enviawan(): return self.get_status() self.__t_lan = Thread(target=self.run_Lan,name='LAN_Thread') self.__t_lan.start() self.__packet_sniffer_wan = PacketSniffer('Test322b-WAN',self.__queue_wan,self,self.__config,self.__wan_device_tr1) self.__packet_sniffer_wan.start() self.__packet_sniffer_lan = PacketSniffer('Test322b-LAN',self.__queue_lan,self,self.__config,self.__lan_device) test_lan = self.__packet_sniffer_lan.start() self.__config_setup1_1.set_ra2() self.set_flags() logging.info(self.__test_desc) t_test = 0 time1 = 0 sent_reconfigure = False time_over = False start_time_count = False finish_wan = False part1_OK = False cache_wan = [] self.__config_setup1_1.set_pd_prefixlen(self.__config.get('t3.2.2b','pd_prefixlen')) self.__config_setup1_1.set_routerlifetime(self.__config.get('t3.2.2b','routerlifetime')) while not self.__queue_wan.full(): if self.__queue_wan.empty(): if t_test <= 300: time.sleep(1) t_test = t_test + 1 if t_test % 10 == 0: self.set_status('WAN: Enviando ICMP RA periódico') logging.info('WAN: Enviando ICMP RA periódico') self.rourter_advertise() if start_time_count: if time1 < 600: time1 = time1 + 1 else: time_over = True else: pkt = self.__queue_wan.get() cache_wan.append(pkt) wrpcap("WAN-3.2.2b.cap",cache_wan) if not self.__config_setup1_1.get_ND_local_OK(): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): continue if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Solicit): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','global_wan_addr'): self.set_status('WAN: Enviando resposta ao NS com ICMP NA global') logging.info('WAN: Enviando resposta ao NS com ICMP NA global') self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','link_local_addr'): self.set_status('WAN: Enviando resposta ao NS com ICMP NA local') logging.info('WAN: Enviando resposta ao NS com ICMP NA local') self.neighbor_advertise_local(pkt) if not self.__config_setup1_1.get_setup1_1_OK(): self.set_status('WAN: Setup 1.1 em execução') logging.info('WAN: Setup 1.1 em execução') if not self.__config_setup1_1.get_disapproved(): self.__config_setup1_1.run_setup1_1(pkt) if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): continue self.set_status('WAN: Enviando ICMP RA com Routerlifetime maior que zero') logging.info('WAN: Enviando ICMP RA com Routerlifetime maior que zero') self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) 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','ra_address')) self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) else: logging.info('Reprovado Teste 3.2.2b - Falha em completar o Common Setup 1.1 da RFC') self.__packet_sniffer_wan.stop() return False else: if not self.__finish_wan: start_time_count = True if time1 < 50: if part1_OK == False: if pkt.haslayer(ICMPv6EchoRequest): self.set_status('WAN: Parte 1 concluida com quando Router Lifetime Maior que zero') logging.info('WAN: Parte 1 concluida com quando Router Lifetime Maior que zero') part1_OK = True if self.part2_lan_start: if pkt.haslayer(ICMPv6EchoRequest): self.set_status('Reprovado Teste 3.2.2b - Recebido ICMPv6EchoRequest na WAN sendo que Routerlifime anunciado é zero') time.sleep(2) self.set_status('REPROVADO') # Mensagem padrão para o frontEnd atualizar Status logging.info('Reprovado Teste 3.2.2b - Recebido ICMPv6EchoRequest na WAN sendo que Routerlifime anunciado é zero') self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = False return False if part1_OK and not self.part2_lan_start: #print('enviado1') self.__config_setup1_1.set_routerlifetime('0') self.__config_setup1_1.set_reachabletime('0') self.__config_setup1_1.set_retranstimer('0') self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) #print('limpando') while not self.stop_ping_OK: time.sleep(1) #print('aguardando terminar') logging.info('WAN: Aguardando cessar mensagens Echo Request na LAN para iniciar Captura da parte 2 de ICMP RA com Router Lifetime igual zero') self.set_status('WAN: Aguardando cessar mensagens Echo Request na LAN para iniciar Captura da parte 2 de ICMP RA com Router Lifetime igual zero') time.sleep(10) while not self.__queue_wan.empty(): self.__queue_wan.get() #print('enviando 3') logging.info('WAN: Enviando ICMP RA com Router Lifetime igual a zero') self.set_status('WAN: Enviando ICMP RA com Router Lifetime igual a zero') for x in range(3): time.sleep(1) x = x+1 self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) self.part2_lan_start = True if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('t3.2.2b','tn3_ip'): #print('glboal') logging.info('WAN: Solicitado NS com target TN3. Enviado NA do TN3') self.set_status('WAN: Solicitado NS com target TN3. Enviado NA do TN3') self.neighbor_advertise_global_tn3(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','ra_address'): #print('local') logging.info('WAN: Recebido ICMP NS do TN1. Enviando Resposta ICMP NA do TN1') self.set_status('WAN: Recebido ICMP NS do TN1. Enviando Resposta ICMP NA do TN1') self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','ra_address')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','ra_mac')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','ra_address')) self.__config_setup1_1.set_lla(self.__config.get('wan','ra_mac')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) else: self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.set_status('Teste 3.2.2b - APROVADO. Não passou pacotes da LAN para WAN após envio do RouterLifetime igual a zero') time.sleep(2) self.set_status('APROVADO') logging.info('Teste 3.2.2b - APROVADO. Não passou pacotes da LAN para WAN após reconfiguração do RouterLifetime zero') return True else: self.__packet_sniffer_wan.stop() if self.__fail_test: return False else: return True self.__packet_sniffer_wan.stop() return False
class Test162a: 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.__approved = False self.__local_addr_ceRouter = None 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.2a') self.msg = self.__config.get('tests', '1.6.2a') self.msg_lan = self.__config.get('tests', '1.6.2a') self.addr_ceRouter = None def get_addr_ceRouter(self): return self.addr_ceRouter def get_mac_ceRouter(self): return self.mac_ceRouter 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 set_flags(self): self.__config_setup1_1.set_flag_M( self.__config.get('t1.6.2a', 'flag_m')) self.__config_setup1_1.set_flag_0( self.__config.get('t1.6.2a', 'flag_o')) self.__config_setup1_1.set_flag_chlim( self.__config.get('t1.6.2a', 'flag_chlim')) self.__config_setup1_1.set_flag_L( self.__config.get('t1.6.2a', 'flag_l')) self.__config_setup1_1.set_flag_A( self.__config.get('t1.6.2a', 'flag_a')) self.__config_setup1_1.set_flag_R( self.__config.get('t1.6.2a', 'flag_r')) self.__config_setup1_1.set_flag_prf( self.__config.get('t1.6.2a', 'flag_prf')) self.__config_setup1_1.set_validlifetime( self.__config.get('t1.6.2a', 'validlifetime')) self.__config_setup1_1.set_preferredlifetime( self.__config.get('t1.6.2a', 'preferredlifetime')) self.__config_setup1_1.set_routerlifetime( self.__config.get('t1.6.2a', 'routerlifetime')) self.__config_setup1_1.set_intervalo( self.__config.get('t1.6.2a', 'intervalo')) self.__config_setup1_1.set_pd_prefixlen( self.__config.get('t1.6.2a', 'pd_prefixlen')) self.__config_setup1_1.set_prefix_addr( self.__config.get('setup1-1_advertise', 'ia_pd_address')) self.__config_setup1_1.set_dhcp_t1( self.__config.get('t1.6.2a', 'dhcp_t1')) self.__config_setup1_1.set_dhcp_t2( self.__config.get('t1.6.2a', 'dhcp_t2')) self.__config_setup1_1.set_dhcp_preflft( self.__config.get('t1.6.2a', 'dhcp_preflft')) self.__config_setup1_1.set_dhcp_validlft( self.__config.get('t1.6.2a', 'dhcp_validlft')) self.__config_setup1_1.set_dhcp_plen( self.__config.get('t1.6.2a', 'dhcp_plen')) self.__config_setup1_1.set_retranstimer( self.__config.get('t1.6.2a', 'retrans_time')) self.__config_setup1_1.set_reachabletime( self.__config.get('t1.6.2a', 'reach_time')) def send_echo_request_global(self): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('setup1-1_advertise', 'ia_na_address')) 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.__sendmsgs.send_echo_request(self.__config_setup1_1) 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('test161', self.__queue_wan, self, self.__config, self.__wan_device_tr1) self.__packet_sniffer_wan.start() # logging.info('Task Desc') logging.info(self.__test_desc) t_test = 0 time_over = False t_test1 = 0 t_test2 = 0 cache_wan = [] self.set_flags() self.__config_setup1_1.set_ra2() while not self.__queue_wan.full(): while self.__queue_wan.empty(): if t_test < 120: time.sleep(1) t_test = t_test + 1 if t_test % 20 == 0: 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)) if t_test % 6 == 0 and self.__config_setup1_1.get_setup1_1_OK( ): self.set_status( 'WAN: Enviando ECHO REQUEST IP global do roteador') logging.info( 'WAN: Enviando ECHO REQUEST IP global do roteador') self.send_echo_request_global() else: self.__packet_sniffer_wan.stop() logging.info('Reprovado: Teste 1.6.2a- TImeout') self.set_status('Reprovado: Teste 1.6.2a TImeout') time.sleep(2) self.set_status( 'REPROVADO' ) # Mensagem padrão para o frontEnd atualizar Status return False pkt = self.__queue_wan.get() cache_wan.append(pkt) wrpcap("wan-1.6.3a.cap", cache_wan) if not self.__config_setup1_1.get_setup1_1_OK(): logging.info('WAN: Setup 1.1 em execução') self.set_status('WAN: Setup 1.1 em execução') if not self.__config_setup1_1.get_disapproved(): self.__config_setup1_1.run_setup1_1(pkt) else: logging.info( 'WAN: Reprovado Teste 1.6.2a - Falha em completar o setup 1.1' ) self.set_status( 'Reprovado Teste 1.6.2a - Falha em completar o setup 1.1' ) time.sleep(2) self.set_status( 'REPROVADO' ) # Mensagem padrão para o frontEnd atualizar Status self.__packet_sniffer_wan.stop() return False else: if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'global_wan_addr'): ##print('LOOP NS') ##print(pkt[ICMPv6ND_NS].tgt) #if not send_na_lan: self.set_status( 'WAN: Enviando resposta ao NS com ICMP NA global') logging.info( 'WAN: Enviando resposta ao NS com ICMP NA global') self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ether_src( self.__config.get('wan', 'wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_lla( self.__config.get('wan', 'wan_mac_tr1')) #send_na_lan = True self.__sendmsgs.send_icmp_na(self.__config_setup1_1) if pkt.haslayer(ICMPv6EchoReply): mac_dst = pkt[Ether].dst if mac_dst == self.__config.get('wan', 'link_local_mac'): self.__packet_sniffer_wan.stop() logging.info( 'Aprovado Teste 1.6.2.a: Recebido Mensagem Echo Reply com MAC do CeRouter em MAC destino' ) self.set_status( 'Aprovado Teste 1.6.2.a: Recebido Mensagem Echo Reply com MAC do CeRouter em MAC destino' ) time.sleep(2) self.set_status( 'APROVADO' ) # Mensagem padrão para o frontEnd atualizar Status return True else: self.__packet_sniffer_wan.stop() logging.info( 'Reprovado Teste 1.6.2.a: Recebido Mensagem Echo Reply Sem MAC do CeRouter em MAC destino' ) self.set_status( 'Reprovado Teste 1.6.2.a: Recebido Mensagem Echo Reply Sem MAC do CeRouter em MAC destino' ) time.sleep(2) self.set_status( 'REPROVADO' ) # Mensagem padrão para o frontEnd atualizar Status return False while not self.__queue_wan.empty(): pkt = self.__queue_wan.get() self.__packet_sniffer_wan.stop() return True
class Test162a: 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.__approved = False # 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.__local_addr_ceRouter = None 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.2a') def send_echo_request_global(self): self.__config_setup1_1.set_ipv6_src( self.__config.get('wan', 'global_wan_addr')) self.__config_setup1_1.set_ipv6_dst( self.__config.get('setup1-1_advertise', 'ia_na_address')) 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.__sendmsgs.send_echo_request(self.__config_setup1_1) def run(self): self.__packet_sniffer_wan = PacketSniffer('test162a', self.__queue_wan, self, self.__config, self.__wan_device_tr1) self.__config_setup1_1.flags_partA() self.__packet_sniffer_wan.start() # logging.info('Task Desc') logging.info(self.__test_desc) t_test = 0 time_over = 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.__config_setup1_1.get_setup1_1_OK(): if not self.__config_setup1_1.get_disapproved(): self.__config_setup1_1.run_setup1_1(pkt) else: self.__packet_sniffer_wan.stop() logging.info( 'Reprovado Teste 1.6.2.a - Falha em completar o Common Setup 1.1 da RFC' ) return False else: self.send_echo_request_global() if time_over: self.__packet_sniffer_wan.stop() logging.info( 'Falha: Teste 1.6.2.a Por tempo finalizado: Não foi recebido Mensagem EchoReply' ) return False elif pkt.haslayer(ICMPv6EchoReply): mac_dst = pkt[Ether].dst if mac_dst == self.__config.get('wan', 'link_local_addr'): self.__packet_sniffer_wan.stop() logging.info( 'Aprovado Teste 1.6.2.a: Recebido Mensagem Echo Reply com MAC do CeRouter em MAC destino' ) return True else: self.__packet_sniffer_wan.stop() logging.info( 'Reprovado Teste 1.6.2.a: Recebido Mensagem Echo Reply Sem MAC do CeRouter em MAC destino' ) return False while not self.__queue_wan.empty(): # print('RS1') pkt = self.__queue_wan.get() # logging.info('Passo4-t162run_sttop-theard success') # logging.info('self.__queue_size_fim') # logging.info(self.__queue_wan.qsize()) #time.sleep(2) self.__packet_sniffer_wan.stop() #time.sleep(2) return True
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")
class Test324: def __init__(self,config,app): self.__queue_wan = Queue() self.__queue_lan = Queue() self.__config = config self.__interface = None self.__pkt = None self.__local_addr_ceRouter =None 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.__lan_device = self.__config.get('lan','lan_device') 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','3.2.4') self.__t_lan = None self.__finish_wan = False self.part2_lan_start = False self.__dhcp_renew_done = False self.stop_ping_OK = False self.ipsrc = None self.__app = app self.msg = self.__config.get('tests','3.2.4') self.msg_lan =self.__config.get('tests','3.2.4') self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config,self.__lan_device) def set_flags(self): logging.info('WAN: Setup1.1 concluido. Contador de 300 s iniciado afim de concluir o teste') self.__config_setup1_1.set_flag_M(self.__config.get('t3.2.4','flag_m')) self.__config_setup1_1.set_flag_0(self.__config.get('t3.2.4','flag_o')) self.__config_setup1_1.set_flag_chlim(self.__config.get('t3.2.4','flag_chlim')) self.__config_setup1_1.set_flag_L(self.__config.get('t3.2.4','flag_l')) self.__config_setup1_1.set_flag_A(self.__config.get('t3.2.4','flag_a')) self.__config_setup1_1.set_flag_R(self.__config.get('t3.2.4','flag_r')) self.__config_setup1_1.set_flag_prf(self.__config.get('t3.2.4','flag_prf')) self.__config_setup1_1.set_validlifetime(self.__config.get('t3.2.4','validlifetime')) self.__config_setup1_1.set_preferredlifetime(self.__config.get('t3.2.4','preferredlifetime')) self.__config_setup1_1.set_routerlifetime(self.__config.get('t3.2.4','routerlifetime')) self.__config_setup1_1.set_reachabletime(self.__config.get('t3.2.4','reach_time')) self.__config_setup1_1.set_retranstimer(self.__config.get('t3.2.4','retrans_time')) self.__config_setup1_1.set_intervalo(self.__config.get('t1.6.6b','intervalo')) self.__config_setup1_1.set_prefix_addr(self.__config.get('setup1-1_advertise','ia_pd_address')) self.__config_setup1_1.set_dhcp_t1(self.__config.get('t3.2.4','dhcp_t1')) self.__config_setup1_1.set_dhcp_t2(self.__config.get('t3.2.4','dhcp_t2')) self.__config_setup1_1.set_dhcp_preflft(self.__config.get('t3.2.4','dhcp_preflft')) self.__config_setup1_1.set_dhcp_validlft(self.__config.get('t3.2.4','dhcp_validlft')) self.__config_setup1_1.set_dhcp_plen(self.__config.get('t3.2.4','dhcp_plen')) def set_flags_lan(self): self.__config_setup_lan.set_elapsetime(self.__config.get('solicitlan','elapsetime')) self.__config_setup_lan.set_xid(self.__config.get('solicitlan','xid')) self.__config_setup_lan.set_fdqn(self.__config.get('solicitlan','clientfqdn')) self.__config_setup_lan.set_vendor_class(self.__config.get('solicitlan','vendorclass')) self.__config_setup_lan.set_enterprise(self.__config.get('solicitlan','enterpriseid')) self.__config_setup_lan.set_client_duid(self.__config.get('solicitlan','duid')) self.__config_setup_lan.set_iaid(self.__config.get('solicitlan','iaid')) def ping_tn1_ula(self): if self.__config_setup1_1.get_mac_ceRouter() != None: self.ipsrc = self.__config.get('t3.2.4','prefix_ula') + self.__config.get('t3.2.4','sufix_ula') self.__config_setup_lan.set_ipv6_src(self.ipsrc) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac')) self.__config_setup_lan.set_ether_dst(self.__config_setup_lan.get_mac_ceRouter()) self.__config_setup_lan.set_ipv6_dst(self.__config.get('wan','global_wan_addr')) self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan) def send_dhcp_information(self): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst('33:33:00:01:00:02') self.__config_setup_lan.set_ipv6_dst(self.__config.get('multicast','all_routers_addr')) self.__config_setup_lan.set_xid(self.__config.get('informationlan','xid')) self.__config_setup_lan.set_elapsetime(self.__config.get('informationlan','elapsetime')) self.__config_setup_lan.set_vendor_class(self.__config.get('informationlan','vendorclass')) self.__sendmsgs.send_dhcp_information(self.__config_setup_lan) def send_rs_lan(self): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(self.__config.get('multicast','all_mac_routers')) self.__config_setup_lan.set_ipv6_dst(self.__config.get('general','all_routers_address')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__sendmsgs.send_icmp_rs(self.__config_setup_lan) def send_global_na_lan(self,pkt): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','global_wan_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def send_local_na_lan(self,pkt): self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.__config.get('lan','lan_local_addr')) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) def rourter_advertise(self): 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','ra_address')) self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) def ping(self): if self.__config_setup1_1.get_mac_ceRouter() != None: self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(self.__config_setup1_1.get_mac_ceRouter()) self.__config_setup1_1.set_ipv6_dst(self.__config.get('t3.2.4','unreachable_ip')) self.__sendmsgs.send_echo_request(self.__config_setup1_1) def neighbor_advertise_local(self,pkt): self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','link_local_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global(self,pkt): self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','global_wan_addr')) self.__config_setup1_1.set_lla(self.__config.get('wan','wan_mac_tr1')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def neighbor_advertise_global_tn3(self,pkt): self.__config_setup1_1.set_ipv6_src(self.__config.get('t3.2.4','tn3_ip')) self.__config_setup1_1.set_ether_src(self.__config.get('t3.2.4','tn3_mac')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('t3.2.4','tn3_ip')) self.__config_setup1_1.set_lla(self.__config.get('t3.2.4','tn3_mac')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) def set_status_lan(self,v): self.msg_lan = v def get_status_lan(self): return self.msg_lan def run_Lan(self): t_test = 0 t_test1= 0 time_p = 0 sent_reconfigure = False time_over = False send_ra = False send_na_lan = False reset_test1 = False self.set_flags_lan() self.__config_setup_lan.set_setup_lan_start() cache_lan = [] @self.__app.route("/LAN",methods=['GET']) def envia_lan(): return self.get_status_lan() while not self.__queue_lan.full(): if self.__queue_lan.empty(): if t_test < 30: time.sleep(1) t_test = t_test + 1 if t_test % 5 ==0: self.set_status_lan('LAN: Transmissões de RS e DHCP information por 30 s a cada 5 seg.') logging.info('LAN: Inicio das transmissões de RS e DHCP information por 30 s.') self.send_dhcp_information() self.send_rs_lan() time.sleep(1) else: time_over = True else: pkt = self.__queue_lan.get() cache_lan.append(pkt) wrpcap("lan-3.2.4.cap",cache_lan) if pkt.haslayer(ICMPv6ND_RA): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(ICMPv6MLReport2): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Reply): self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) if pkt[Ether].src == self.__config.get('lan','mac_address'): continue if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','global_wan_addr'): self.send_global_na_lan(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','lan_local_addr'): self.send_local_na_lan(pkt) if self.__config_setup1_1.get_setup1_1_OK(): self.set_status_lan('LAN: Setup1.1 concluido. Contador de 300 s iniciado afim de concluir o teste') logging.info('LAN: Setup1.1 concluido. Contador de 300 s iniciado afim de concluir o teste') if pkt[Ether].src == self.__config.get('lan','mac_address'): continue if t_test1 < 300: t_test1 = t_test1 + 1 if t_test1 % 5 == 0: self.set_status_lan('LAN:Fim do setup 1.1. Enviando ICMPv6 RS') self.send_rs_lan() if pkt.haslayer(ICMPv6ND_RA): if pkt[ICMPv6NDOptPrefixInfo].prefix == self.__config.get('t3.2.4','prefix_ula'): logging.info('LAN: Recebido prefixo esperado. Inciando tentativa de Pingar um endereco Global') self.set_status_lan('LAN: Recebido prefixo esperado. Inciando tentativa de Pingar um endereco Global') time.sleep(2) self.ping_tn1_ula() else: self.__finish_wan = True self.__fail_test = True self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.set_status_lan('Teste 3.2.4 - FALHA. VERIFIQUE O PREFIXO ULA CONFIGURADO NO ROTEADOR') time.sleep(2) logging.info('Teste 3.2.4 - FALHA. VERIFIQUE O PREFIXO ULA CONFIGURADO NO ROTEADOR') self.set_status_lan('REPROVADO') print(pkt[ICMPv6NDOptPrefixInfo].prefix) return False if pkt.haslayer(ICMPv6DestUnreach): self.__finish_wan = True self.__fail_test = False #self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.set_status_lan('APROVADO') logging.info('TEST 3.2.4: UNIQUE LOCAL ADDRESS FORWARDING....APROVADO') return True if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','global_wan_addr'): self.send_global_na_lan(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('lan','lan_local_addr'): self.send_local_na_lan(pkt) if pkt[ICMPv6ND_NS].tgt == self.ipsrc: self.set_status_lan('LAN: Recebido NS target Local: enviando ICMP NA local') self.__config_setup_lan.set_ipv6_src(self.ipsrc) self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_ether_dst(pkt[Ether].src) self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src) self.__config_setup_lan.set_tgt(self.ipsrc) self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address')) self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan) else: self.set_status_lan('Nao foi recebido a mensagem Destino Inalcançável durante a execução do teste') time.sleep(2) self.set_status_lan('REPROVADO') logging.info('TEST 3.2.4: UNIQUE LOCAL ADDRESS FORWARDING....REPROVADO') logging.info('Nao foi recebido a mensagem Destino Inalcançável durante a execução do teste') self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.__finish_wan = True self.__fail_test = False return False def set_status(self,v): self.msg = v def get_status(self): return self.msg def run(self): self.set_status('Ative a ULA com prefixo: ' + self.__config.get('t3.2.4','prefix_ula') + ' . E reinicie o Roteador') @self.__app.route("/WAN",methods=['GET']) def enviawan(): return self.get_status() logging.info(self.__test_desc) logging.info('==================================================================================================') logging.info('Ative a ULA com prefixo: ' + self.__config.get('t3.2.4','prefix_ula') + ' . E reinicie o Roteador') logging.info('===================================================================================================') time.sleep(10) self.__t_lan = Thread(target=self.run_Lan,name='LAN_Thread') self.__t_lan.start() self.set_status('Thread LAN Criada') self.__packet_sniffer_wan = PacketSniffer('Test273b-WAN',self.__queue_wan,self,self.__config,self.__wan_device_tr1) self.__packet_sniffer_wan.start() self.set_status('Sniffer WAN Inciado') self.__packet_sniffer_lan = PacketSniffer('Test273b-LAN',self.__queue_lan,self,self.__config,self.__lan_device) self.set_status('Sniffer LAN Inciado') test_lan = self.__packet_sniffer_lan.start() self.__config_setup1_1.set_ra2() self.set_flags() logging.info(self.__test_desc) t_test = 0 time1 = 0 sent_reconfigure = False time_over = False start_time_count = False finish_wan = False part1_OK = False cache_wan = [] self.__config_setup1_1.set_pd_prefixlen(self.__config.get('t3.2.4','pd_prefixlen')) self.__config_setup1_1.set_routerlifetime(self.__config.get('t3.2.4','routerlifetime')) self.set_status('WAN: Tráfego Iniciado') while not self.__queue_wan.full(): if self.__queue_wan.empty(): if t_test <= 300: time.sleep(1) t_test = t_test + 1 if t_test % 10 == 0: self.set_status('WAN: Transmissão de ICMP RA periódico') logging.info('WAN: Inicio das transmissoes de Router Advertisment') self.rourter_advertise() if start_time_count: self.set_status('Setup 1.1 concluido') logging.info('WAN: Inicio do novo temporizador. Setup 1.1 concluido') if time1 < 600: time1 = time1 + 1 else: self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.set_status('Timeout') time.sleep(2) self.set_status('REPROVADO') time_over = True else: pkt = self.__queue_wan.get() cache_wan.append(pkt) wrpcap("WAN-3.2.4.cap",cache_wan) if not self.__config_setup1_1.get_ND_local_OK(): self.set_status('WAN: Setup 1.1 em execução') logging.info('WAN: Inicio do setup 1.1. Pode demorar para concluir') if pkt[Ether].src == self.__config.get('wan','link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): continue if pkt.haslayer(ICMPv6ND_RS): self.set_status('WAN: Recebido ICMPv6_RS') if pkt[Ether].src == self.__config.get('wan','link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Solicit): self.set_status('WAN: Recebido DHCP6 Solicit') if pkt[Ether].src == self.__config.get('wan','link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): continue self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(ICMPv6ND_NS): self.set_status('WAN: Recebido ICMPv6 NS') if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','global_wan_addr'): logging.info('WAN: Solicitado ICMP_NS para um target Global. Enviando NA global do host') self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','link_local_addr'): logging.info('WAN: Solicitado ICMP_NS para um target local. Enviando NA local host') self.neighbor_advertise_local(pkt) if not self.__config_setup1_1.get_setup1_1_OK(): self.set_status('WAN: Setup 1.1 em execução') if not self.__config_setup1_1.get_disapproved(): self.__config_setup1_1.run_setup1_1(pkt) if pkt.haslayer(ICMPv6ND_RS): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): continue if pkt[Ether].src == self.__config.get('wan','ra_mac'): continue self.set_status('WAN: Setup 1.1 Recebido ICMP RS, enviado RA') self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) 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','ra_address')) self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) logging.info('Solicitado ICMP_RS. Enviando RA_ver2') self.__sendmsgs.send_tr1_RA2(self.__config_setup1_1) else: self.set_status('WAN: Reprovado Teste 3.2.4 - Falha em completar o Common Setup 1.1 da RFC') self.set_status('REPROVADO') logging.info('WAN: Reprovado Teste 3.2.4 - Falha em completar o Common Setup 1.1 da RFC') self.__packet_sniffer_wan.stop() return False else: self.set_status('WAN: Setup 1.1 Finalizado. Iniciando novo contador de tempo. O teste termina em 300 seg se a mensagem aguardada nao for recebida') logging.info('WAN: Setup 1.1 Finalizado. Iniciando novo contador de tempo. O teste termina em 300 seg se a mensagem aguardada nao for recebida') if not self.__finish_wan: start_time_count = True if time1 < 300: if pkt.haslayer(ICMPv6EchoRequest): logging.info('WAN: TEST 3.2.4: UNIQUE LOCAL ADDRESS FORWARDING....REPROVADO') logging.info('WAN: Indevido recebimento de Echo Request na WAN de um IP proveniente pela ULA do roteador atribuido aos hosts na LAN') self.set_status('WAN: Indevido recebimento de Echo Request na WAN de um IP gerado pela ULA do roteador aos hosts na LAN') time.sleep(2) self.set_status('REPROVADO') self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() self.__finish_wan = True return False if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','global_wan_addr'): self.neighbor_advertise_global(pkt) if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','ra_address'): self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','ra_address')) self.__config_setup1_1.set_ether_src(self.__config.get('wan','ra_mac')) self.__config_setup1_1.set_ether_dst(pkt[Ether].src) self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src) self.__config_setup1_1.set_tgt(self.__config.get('wan','ra_address')) self.__config_setup1_1.set_lla(self.__config.get('wan','ra_mac')) self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src) self.__sendmsgs.send_icmp_na(self.__config_setup1_1) else: self.__packet_sniffer_wan.stop() self.__packet_sniffer_lan.stop() #return send_file('/home/ronaldo/tcc_oficial/tcc_ronaldo/lan.cap', attachment_filename='lan.cap') self.set_status('WAN: Time out sem mensagem Unreacheable na interface LAN') time.sleep(2) self.set_status('REPROVADO') logging.info('WAN: TEST 3.2.4: UNIQUE LOCAL ADDRESS FORWARDING....REPROVADO') logging.info('WAN: Time out sem mensagem Unreacheable na interface LAN') return True else: self.__packet_sniffer_wan.stop() if self.__fail_test: return False else: return True self.__packet_sniffer_wan.stop() return False
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