Exemple #1
0
	def __init__(self,server=None,token=None,target=None):
		super(Scanner, self).__init__()
		self.server = server
		self.token = token
		self.target = target

		# web接口
		self.web_interface = None
		if server and token:
			self.web_interface = WebInterface(server,token)
		# 任务
		self.services = []
		# 扫描结果
		self.result = {}
		# pluginLoaders
		
		self.pls = []
Exemple #2
0
    def __init__(self, url=None, server=None, session=None):
        super(Scanner, self).__init__()
        #url
        if url[-1] != '/':
            url += '/'
        self.url = url

        # web server class
        self.web_interface = None
        if server and session:
            self.web_interface = WebInterface(server, session)

        m = re.match('(http[s]?)://([^:^/]+):?([^/]*)/', url)
        if m:
            self.http_type = m.group(1)
            self.host = m.group(2)
            self.ports = m.group(3)
            self.ip = socket.gethostbyname(self.host)
            self.domain = GetFirstLevelDomain(self.host)
        else:
            print 'not a valid url', url
            sys.exit(0)
        commonports = '21,22,23,25,110,53,67,80,443,1521,1526,3306,3389,8080,8580'
        if self.ports != '':
            self.ports = commonports + ',' + ports
        else:
            self.ports = commonports

        # every plugin's input argument services
        self.services = {}
        self.services['url'] = self.url
        self.services['host'] = self.host
        self.services['ports'] = [self.ports]
        self.services['http'] = []

        # scan result
        self.result = {}

        # thread arguments
        self.lock = threading.Lock()

        # urls
        self.urls = {}
        # pluginloaders
        self.pls = []
    def __init__(self,
                 server=None,
                 token=None,
                 target=None,
                 threads=None,
                 loglevel='INFO',
                 gatherdepth=1):
        super(Scanner, self).__init__()
        self.server = server
        self.token = token
        self.target = target
        if threads and type(threads) == int:
            self.threads = threads
        else:
            self.threads = multiprocessing.cpu_count()
        self.gatherdepth = gatherdepth
        self.loglevel = loglevel
        self.args = {
            'loglevel': self.loglevel,
            'threads': self.threads,
            'gatherdepth': self.gatherdepth
        }

        # web接口
        self.web_interface = None
        if server and token:
            self.web_interface = WebInterface(server, token)
        # 任务
        self.services = []
        # 扫描结果
        self.result = {}
        # pluginLoaders

        self.pls = []

        self.loghandler = []

        # log 模块,确保赋值一次
        if globalVar.mainlogger is None:
            globalVar.mainlogger = logging.getLogger('main')
            if loglevel == 'DEBUG':
                globalVar.mainlogger.setLevel(logging.DEBUG)
            else:
                globalVar.mainlogger.setLevel(logging.INFO)

            #	logging handler
            formatter = logging.Formatter(
                '[%(process)d] - [%(levelname)s] - %(message)s')
            # 创建一个handler,用于写入日志文件
            filepath = BASEDIR + '/output/log/' + genFilename(
                self.target) + '.log'
            if os.path.isfile(filepath):
                os.remove(filepath)
            fh = logging.FileHandler(filepath, 'a')
            # 再创建一个handler,用于输出到控制台
            ch = logging.StreamHandler()

            fi = logging.Filter('main')

            fh.addFilter(fi)
            ch.addFilter(fi)

            fh.setFormatter(formatter)
            ch.setFormatter(formatter)

            self.loghandler.append(ch)
            self.loghandler.append(fh)

            self._initLogging()

        globalVar.mainlogger.info('[*] Start a new scan')
        globalVar.mainlogger.info('\tserver\t=%s' % server)
        globalVar.mainlogger.info('\ttoken\t=%s' % token)
        globalVar.mainlogger.info('\ttarget\t=%s' % target)
        globalVar.mainlogger.info('\tthreads\t=%d' % self.threads)

        # 注意:不能通过以下的方式进行清空
        # globalVar.undone_targets = []
        tmpundone = copy.deepcopy(globalVar.undone_targets)
        for each_target in tmpundone:
            globalVar.undone_targets.remove(each_target)
	def __init__(self,server=None,token=None,target=None,pluginfilepath=None,pluginargs=None,threads=None,loglevel='INFO'):
		super(PluginMultiRunner, self).__init__()
		self.server = server
		self.token = token
		self.target = target
		self.pluginfilepath = BASEDIR +'/' +pluginfilepath
		self.pluginargs = pluginargs
		if threads and type(threads) == int:
			self.threads = int(threads)
		else:
			self.threads = multiprocessing.cpu_count()
		self.loglevel = loglevel
		self.args = {'loglevel':self.loglevel,'threads':self.threads}

		# web接口
		self.web_interface = None
		if server and token:
			self.web_interface = WebInterface(server,token)
		# 任务
		self.services = []
		# 扫描结果
		self.result = {}
		# pluginLoaders
		
		self.pls = []

		# log 模块
		globalVar.mainlogger = logging.getLogger('main')
		if loglevel == 'DEBUG':
			globalVar.mainlogger.setLevel(logging.DEBUG)
		else:
			globalVar.mainlogger.setLevel(logging.INFO)

		# 定义handler的输出格式formatter    
		# formatter = logging.Formatter('%(asctime)s - %(name)s - [%(levelname)s] - %(message)s')  
		formatter1 = logging.Formatter('[%(process)d] - [%(levelname)s] - %(message)s')  
		formatter2 = logging.Formatter('%(message)s')  
		# 创建一个handler,用于写入日志文件  
		filepath = BASEDIR+'/output/scan.log'
		if os.path.isfile(filepath):
			os.remove(filepath)
		fh = logging.FileHandler(filepath,'a')    
		# 再创建一个handler,用于输出到控制台
		ch = logging.StreamHandler()  

		fi = logging.Filter('main')

		fh.addFilter(fi)
		ch.addFilter(fi)

		fh.setFormatter(formatter1)
		ch.setFormatter(formatter1)

		globalVar.mainlogger.addHandler(fh)
		globalVar.mainlogger.addHandler(ch)

		globalVar.mainlogger.info('[*] Start an new scan')
		globalVar.mainlogger.info('\tserver  =%s' % server)
		globalVar.mainlogger.info('\ttoken   =%s' % token)
		globalVar.mainlogger.info('\ttarget  =%s' % target)
		globalVar.mainlogger.info('\tthreads =%d' % self.threads)
Exemple #5
0
    def __init__(self, conffile):
        super(Scanner, self).__init__()

        config = json.load(open(conffile, 'r'))
        # 1. init globalVar.config first
        globalVar.config = config
        pprint(globalVar.config['global'])

        # 2.
        self.server = config['global']['server']
        self.token = config['global']['token']
        # 注意targetname直接在config的key,而不是config['global']的key
        self.targetname = config['targetname']
        self.target = config['global']['target']
        self.threads = int(
            config['global']['threads']
        ) if config['global']['threads'] != '' else multiprocessing.cpu_count(
        )
        print 'self.threads=', self.threads, type(self.threads)
        # print "config['global']['gatherdepth']=",config['global']['gatherdepth']
        self.gatherdepth = int(
            config['global']
            ['gatherdepth']) if config['global']['gatherdepth'] != '' else 0
        # print 'self.gatherdepth=',self.gatherdepth
        self.loglevel = config['global']['loglevel'] if config['global'][
            'threads'] == '' else 'INFO'
        self.args = {
            'loglevel': self.loglevel,
            'threads': self.threads,
            'gatherdepth': self.gatherdepth
        }
        self.pluginargs = config['plugins']

        # web接口
        self.web_interface = None
        if self.server and self.token:
            self.web_interface = WebInterface(self.server, self.token)
        # 任务
        self.services = []
        # 扫描结果
        self.result = {}
        # pluginLoaders

        self.pls = []

        # 3. init logging
        self.loghandler = []
        # log 模块,确保赋值一次
        if globalVar.mainlogger is None:
            globalVar.mainlogger = logging.getLogger('main')
            if self.loglevel == 'DEBUG':
                globalVar.mainlogger.setLevel(logging.DEBUG)
            else:
                globalVar.mainlogger.setLevel(logging.INFO)

            #	logging handler
            formatter = logging.Formatter(
                '[%(process)d] - [%(levelname)s] - %(message)s')
            # 创建一个handler,用于写入日志文件
            filepath = BASEDIR + '/output/log/' + genFilename(
                self.targetname) + '.log'
            if os.path.isfile(filepath):
                os.remove(filepath)
            fh = logging.FileHandler(filepath, 'a')
            # 再创建一个handler,用于输出到控制台
            ch = logging.StreamHandler()

            fi = logging.Filter('main')

            fh.addFilter(fi)
            ch.addFilter(fi)

            fh.setFormatter(formatter)
            ch.setFormatter(formatter)

            self.loghandler.append(ch)
            self.loghandler.append(fh)

            self._initLogging()

        globalVar.mainlogger.info('[*] Start a new scan')
        globalVar.mainlogger.info('\tserver\t=%s' % self.server)
        globalVar.mainlogger.info('\ttoken\t=%s' % self.token)
        globalVar.mainlogger.info('\ttarget\t=%s' % self.target)
        globalVar.mainlogger.info('\tthreads\t=%d' % self.threads)

        # 注意:不能通过以下的方式进行清空
        # globalVar.undone_targets = []
        tmpundone = copy.deepcopy(globalVar.undone_targets)
        for each_target in tmpundone:
            globalVar.undone_targets.remove(each_target)