def __translate_ip(self, value): """ Translate IP address or IP range into Sqlalchemy filter. Range must be in CIDR format, e.g. 1.1.1.1/24 """ if NetUtils.is_valid_ip(value): return (Host.ip == value) elif NetUtils.is_valid_ip_range(value): return (Host.is_in_ip_range(value)) else: raise FilterException( '{value} invalid IP/range'.format(value=value))
def __translate_ip(self, value): """ value can be: - Single IP - IP range - format: 1.1.1.1/24 """ if NetUtils.is_valid_ip(value): return (Host.ip == value) elif NetUtils.is_valid_ip_range(value): return (Host.is_in_ip_range(value)) else: raise FilterException( '{value} invalid IP/range'.format(value=value))
def do_hosts(self, args): """Hosts in the current mission scope""" print() req = HostsRequester(self.sqlsess) req.select_mission(self.current_mission) # Logical AND is applied between all specified filtering options filter_ = Filter(FilterOperator.AND) if args.addrs: for addr in args.addrs: if NetUtils.is_valid_ip(addr) or NetUtils.is_valid_ip_range(addr): filter_.add_condition(Condition(addr, FilterData.IP)) else: filter_.add_condition(Condition(addr, FilterData.HOST)) if args.search: filter_search = Filter(FilterOperator.OR) filter_search.add_condition(Condition(args.search, FilterData.HOST)) filter_search.add_condition(Condition(args.search, FilterData.OS)) filter_search.add_condition(Condition(args.search, FilterData.COMMENT_HOST)) filter_.add_condition(filter_search) if args.order: req.order_by(args.order) try: req.add_filter(filter_) except FilterException as e: logger.error(e) return # Operations if args.comment: if not req.filter_applied: if not Output.prompt_confirm('No filter applied. Are you sure you want to edit comment for ALL hosts in current mission ?', default=False): logger.info('Canceled') return req.edit_comment(args.comment) elif args.delete: if not req.filter_applied: if not Output.prompt_confirm('No filter applied. Are you sure you want to delete ALL hosts and related services in current mission', default=False): logger.info('Canceled') return req.delete() else: req.show() print()