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 = []
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)
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)