def parse_args(args): args = parser.parse_args(args) if args.settings_dir is detect_settings_dir: args.settings_dir = detect_settings_dir() if maltego_version(args.settings_dir) >= '3.4.0': print(""" =========================== ERROR: NOT SUPPORTED =========================== Starting from Maltego v3.4.0 the 'canari uninstall-package' command is no longer supported. Please use the Maltego interface to uninstall packages. =========================== ERROR: NOT SUPPORTED =========================== """) exit(-1) return args
def parse_args(args): args = parser.parse_args(args) if args.settings_dir is detect_settings_dir: try: args.settings_dir = detect_settings_dir() except OSError: print "Make sure you've run Maltego for the first time and activated your license." exit(-1) if maltego_version(args.settings_dir) >= "3.4.0": print ( """ =========================== ERROR: NOT SUPPORTED =========================== Starting from Maltego v3.4.0 the 'canari install-package' command is no longer supported. Please use the 'canari create-profile' command, instead. This will create an importable config file (*.mtz) which can be imported using the 'Import Configuration' option in Maltego. This option can be found by clicking on the <Maltego icon> in the top left corner of your Maltego window then scrolling to 'Import' then 'Import Configuration'. NOTE: This command will automatically install and configure the 'canari.conf' file for you in the default location for your OS. EXAMPLE: shell> canari create-profile sploitego ... shell> ls sploitego.mtz <--- Import this file =========================== ERROR: NOT SUPPORTED =========================== """ ) exit(-1) args.working_dir = os.path.realpath(args.working_dir) return args
def parse_args(args): args = parser.parse_args(args) if args.settings_dir is detect_settings_dir: try: args.settings_dir = detect_settings_dir() except OSError: print "Make sure you've run Maltego for the first time and activated your license." exit(-1) if maltego_version(args.settings_dir) >= '3.4.0': print(""" =========================== ERROR: NOT SUPPORTED =========================== Starting from Maltego v3.4.0 the 'canari install-package' command is no longer supported. Please use the 'canari create-profile' command, instead. This will create an importable config file (*.mtz) which can be imported using the 'Import Configuration' option in Maltego. This option can be found by clicking on the <Maltego icon> in the top left corner of your Maltego window then scrolling to 'Import' then 'Import Configuration'. NOTE: This command will automatically install and configure the 'canari.conf' file for you in the default location for your OS. EXAMPLE: shell> canari create-profile sploitego ... shell> ls sploitego.mtz <--- Import this file =========================== ERROR: NOT SUPPORTED =========================== """) exit(-1) args.working_dir = os.path.realpath(args.working_dir) return args
def run(args): opts = parse_args(args) if path.exists(opts.outfile) and not opts.append and not \ parse_bool('%s already exists. Are you sure you want to overwrite it? [y/N]: ' % repr(opts.outfile), default='n'): exit(-1) entity_source = None if opts.mtz_file is None: d = detect_settings_dir() if maltego_version(d) >= '3.4.0': print(""" =========================== ERROR: NOT SUPPORTED =========================== Starting from Maltego v3.4.0 the 'canari generate-entities' command can no longer generate entity definition files from the Maltego configuration directory. Entities can only be generated from export files (*.mtz). To export entities navigate to the 'Manage' tab in Maltego, then click on the 'Export Entities' button and follow the prompts. Once the entities have been exported, run the following command: shell> canari generate-entities -m myentities.mtz =========================== ERROR: NOT SUPPORTED =========================== """) exit(-1) entity_source = DirFile( path.join(d, 'config', 'Maltego', 'Entities') ) else: entity_source = ZipFile(opts.mtz_file) entity_files = filter(lambda x: x.endswith('.entity'), entity_source.namelist()) namespaces = dict() excluded_entities = [] if opts.append: existing_entities = get_existing_entities(opts.outfile) # excluded_entities.extend([e._type_ for e in existing_entities]) for entity_class in existing_entities: excluded_entities.extend(entity_class._type_) if entity_class._type_.endswith('Entity'): namespaces[entity_class._namespace_] = entity_class.__name__ print 'Generating %s...' % repr(opts.outfile) outfile = open(opts.outfile, 'ab' if opts.append else 'wb') if opts.append: outfile.write('\n\n') else: outfile.write('#!/usr/bin/env python\n\nfrom canari.maltego.entities import EntityField, Entity\n\n\n') for entity_file in entity_files: xml = XML(entity_source.open(entity_file).read()) id_ = xml.get('id') if (opts.entity and id_ not in opts.entity) or id_ in excluded_entities: continue namespace_entity = id_.split('.') base_classname = None namespace = '.'.join(namespace_entity[:-1]) name = namespace_entity[-1] classname = name if (opts.namespace and namespace not in opts.namespace) or namespace in opts.exclude_namespace: continue if namespace not in namespaces: base_classname = '%sEntity' % (''.join([n.title() for n in namespace_entity[:-1]])) namespaces[namespace] = base_classname outfile.write('class %s(Entity):\n _namespace_ = %s\n\n' % (base_classname, repr(namespace))) else: base_classname = namespaces[namespace] for field in xml.findall('Properties/Fields/Field'): fields = [ 'name=%s' % repr(field.get('name')), 'propname=%s' % repr(normalize_fn(field.get('name'))), 'displayname=%s' % repr(field.get('displayName')) ] outfile.write('@EntityField(%s)\n' % ', '.join(fields)) outfile.write('class %s(%s):\n pass\n\n\n' % (classname, base_classname)) outfile.close() print 'done.'
def run(args): opts = parse_args(args) if path.exists(opts.outfile) and not opts.append and not \ parse_bool('%s already exists. Are you sure you want to overwrite it? [y/N]: ' % repr(opts.outfile), default='n'): exit(-1) entity_source = None if opts.mtz_file is None: d = detect_settings_dir() if maltego_version(d) >= '3.4.0': print(""" =========================== ERROR: NOT SUPPORTED =========================== Starting from Maltego v3.4.0 the 'canari generate-entities' command can no longer generate entity definition files from the Maltego configuration directory. Entities can only be generated from export files (*.mtz). To export entities navigate to the 'Manage' tab in Maltego, then click on the 'Export Entities' button and follow the prompts. Once the entities have been exported, run the following command: shell> canari generate-entities -m myentities.mtz =========================== ERROR: NOT SUPPORTED =========================== """) exit(-1) entity_source = DirFile(path.join(d, 'config', 'Maltego', 'Entities')) else: entity_source = ZipFile(opts.mtz_file) entity_files = filter(lambda x: x.endswith('.entity'), entity_source.namelist()) namespaces = dict() excluded_entities = [] if opts.append: existing_entities = get_existing_entities(opts.outfile) # excluded_entities.extend([e._type_ for e in existing_entities]) for entity_class in existing_entities: excluded_entities.extend(entity_class._type_) if entity_class._type_.endswith('Entity'): namespaces[entity_class._namespace_] = entity_class.__name__ print 'Generating %s...' % repr(opts.outfile) outfile = open(opts.outfile, 'ab' if opts.append else 'wb') if opts.append: outfile.write('\n\n') else: outfile.write( '#!/usr/bin/env python\n\nfrom canari.maltego.entities import EntityField, Entity\n\n\n' ) for entity_file in entity_files: xml = XML(entity_source.open(entity_file).read()) id_ = xml.get('id') if (opts.entity and id_ not in opts.entity) or id_ in excluded_entities: continue namespace_entity = id_.split('.') base_classname = None namespace = '.'.join(namespace_entity[:-1]) name = namespace_entity[-1] classname = name if (opts.namespace and namespace not in opts.namespace) or namespace in opts.exclude_namespace: continue if namespace not in namespaces: base_classname = '%sEntity' % (''.join( [n.title() for n in namespace_entity[:-1]])) namespaces[namespace] = base_classname outfile.write('class %s(Entity):\n _namespace_ = %s\n\n' % (base_classname, repr(namespace))) else: base_classname = namespaces[namespace] for field in xml.findall('Properties/Fields/Field'): fields = [ 'name=%s' % repr(field.get('name')), 'propname=%s' % repr(normalize_fn(field.get('name'))), 'displayname=%s' % repr(field.get('displayName')) ] outfile.write('@EntityField(%s)\n' % ', '.join(fields)) outfile.write('class %s(%s):\n pass\n\n\n' % (classname, base_classname)) outfile.close() print 'done.'