if forwarding_ip != WAN_ip: dst_ip = forwarding_ip else: dst_ip = network.dst_ip if dst_ip != forwarding_ip: print('forwaring to', forwarding_table[network.dst_ip]) dst_mac = util.ip2mac(dst_ip) linklayer.sendto(dst_mac, frame) elif (network.dst_ip, transport.dst_port) in NAT_in : network.dst_ip, transport.dst_port = NAT_in[(network.dst_ip, transport.dst_port)] frame = pack(network, transport) IP.push(frame) else: ICMP.host_unreachable(WAN_ip, network.src_ip) linklayer = LinkLayer(callback) # def is_reachable_host(dst_ip): # ''' # Private method for check if the current dst_ip is legal # :param dst_ip: dst_ip # :return: boolean # ''' # ip_list = [util.get_local_ipv4_address()] # for ele in NAT_in.keys(): # ip_list.append(ele[0]) # if dst_ip not in forwarding_table.values() or ip_list: # return False # return True