def search_address(ip_address): ip_address =check_type(StringType, ip_address) address_class =classify_address(ip_address) re_spaces =re.compile("\s+") binary_target_address ="" for octet in ip_address.split("."): octet =int(octet) binary_octet =format(octet, "b").zfill(8) binary_target_address +=binary_octet with open(class_list_paths[address_class], "r") as file: for line in file: line_as_array =re_spaces.split(line.rstrip())[1].split("/") network_address =line_as_array[0] subnetmask =int(line_as_array[1]) re_subnetmask =re.compile("^\d{%(subnetmask)d}" % locals()) binary_network_address ="" for octet in network_address.split("."): octet =int(octet) binary_octet =format(octet, "b").zfill(8) binary_network_address +=binary_octet extracted_network_address =re_subnetmask.match(binary_network_address).group() extracted_target_address =re_subnetmask.match(binary_target_address).group() if int(extracted_network_address) ^ int(extracted_target_address) == 0: # found print line, return 0
def classify_address(ip_address): ip_address =check_type(StringType, ip_address) first_octet =int( ip_address.split(".")[0] ) if 1 <= first_octet <= 126: return 0 elif 128 <= first_octet <= 191: return 1 elif 192 <= first_octet <= 223: return 2