from modules import skeleton from lib.core import utils from lib.mode import speed from lib.sender import execute from lib.sender import polling from lib.sender import report from lib.sender import summary class IPSpace(skeleton.Skeleton): """docstring for LinkFinding""" def banner(self): utils.print_banner("Starting IPSpace") utils.make_directory(self.options['WORKSPACE'] + '/ipspace') def parse_target(self, command): company = utils.get_tld(self.options.get('TARGET')) self.options['COMPANY'] = company # re-generate commands as we add something to options self.gen_commands() # reading ASN and IP space from amass result def get_amass(self, command): ips, ip_range, asns = [], [], [] output_path = command.get('output_path') content = utils.just_read(output_path) if utils.not_empty_file(output_path) and content.strip() != 'null': if utils.is_json(content): ip_range.extend(utils.get_json(content)) amass_output = utils.replace_argument( self.options, '$WORKSPACE/subdomain/amass-$OUTPUT/amass.json') if not utils.not_empty_file(amass_output): return real_ips = summary.get_ip(self.options) if real_ips: ips.extend(real_ips) # parsed output from amass result jsonl = utils.just_read(amass_output, get_list=True) for line in jsonl: json_data = utils.get_json(line) for item in json_data.get('addresses'): ips.append(item.get('ip')) ip_range.append(item.get('cidr')) asns.append(str(item.get('asn'))) ips_file = utils.replace_argument( self.options, '$WORKSPACE/ipspace/summary-$OUTPUT.txt') asn_file = utils.replace_argument( self.options, '$WORKSPACE/ipspace/asn-$OUTPUT.txt') range_file = utils.replace_argument( self.options, '$WORKSPACE/ipspace/range-$OUTPUT.txt') utils.just_write(ips_file, "\n".join(utils.unique_list(ips))) utils.just_write(asn_file, "\n".join(utils.unique_list(asns))) utils.just_write(range_file, "\n".join(utils.unique_list(ip_range)))