def setScanStatus( self,\ idToken,\ status ): scanResult = ScanResult() scanResult.setIdToken( idToken ) scanResult.setStatus( status ) self.setScanResult( scanResult )
def vul_handler(module, ip, taskid): log.info(" start " + module + " ") # 准备进入实际脚本开始检查 task_suc, scan_status, scan_result = VulRun.check(module, ip) log.info("end {}, {}, {}".format(module, ip, " scan...")) if task_suc: task_suc = "FINISH" else: task_suc = "FAIL" ScanResult.sendmsg(taskid, task_suc, scan_status, scan_result, socket.gethostname())
def recover(): while True: if len(ExceptionResult.failed_list) > 0: log.info("recover send msg: ", ExceptionResult.failed_list) try: msg = ExceptionResult.failed_list.pop() # 重用一下这个方法,以后有问题就再重写吧 ScanResult.sendtoredis(msg) pass except Exception as err: log.error("recover error: ", traceback.format_exc()) time.sleep(10 * 60)
def print_results(config, port_results): for i in range(len(port_results)): report_str = "port " + str(config['dports'][i]) report_str += " : [" + ScanResult.get_result_str( port_results[i]) + "]." print report_str print "Scan done."
def rec_callback(ch, method, prop, body): try: taskid = "unknown" scan_status = False # 脚本检查是否认为有异常 True= 有异常 task_suc = False # 任务执行是否有异常 body_msg = body.decode() log.info("receive task: ", body) msg = json.loads(body_msg, encoding='utf-8') taskid = msg['id'] plugin_url = msg['url'] module_name = msg['name'] ip = msg['ip'] if not os.path.exists( os.path.join(os.path.abspath(__file__), 'scripts', module_name + '.py')): r = requests.get(plugin_url) with open( os.path.join(os.path.dirname(os.path.abspath("__file__")), 'scripts', module_name + ".py"), "wb") as f: f.write(r.content) # 准备进入实际脚本开始检查 task_suc, scan_status, scan_result = VulRun.check(module_name, ip) print("end to ", module_name, " scan...") except Exception as err: print('receive deal failed. ', err) task_suc = False scan_result = "执行失败," + str(err) ch.basic_ack(delivery_tag=method.delivery_tag) if task_suc: task_suc = "FINISH" else: task_suc = "FAIL" # 准备返回json模型 rt = taskresultmodel.TaskResultModel(taskid=taskid, taskstatus=task_suc, scriptstatus=scan_status, result=scan_result, tasktime=TimeUtil.datetime_to_strtime( datetime.datetime.now()), node=socket.gethostname()) # 给结果队列发送消息 ScanResult.sendtorabbitmq(json.dumps(obj=rt.__dict__, ensure_ascii=False))
def getScanResultByIdToken( self,\ idToken ): scanResult = ScanResult() for item in self.m_ScanResultList: if (item.getIdToken() == idToken): return item return scanResult
def setScanStatus( self,\ idToken,\ status ): scanResult = ScanResult() scanResult.setIdToken(idToken) scanResult.setStatus(status) self.setScanResult(scanResult)
def fromJSON( self,\ strParse ): size = len(strParse) for item in strParse: scanResult = ScanResult() #большой код bigQRCodeData = BigQRCodeData() bigQRCodeData.setDataFromJSON(item["m_BigQRCodeData"]) scanResult.setBigQRCodeData(bigQRCodeData) scanResult.setIdToken(item["m_IdToken"]) scanResult.setStatus(item["m_Status"]) #маленькие коды парсим smallQRCodeList = item["m_SmallQRCodeDataList"] for smallQRCode in smallQRCodeList: smallQRCodeData = SmallQRCodeData() smallQRCodeData.setData(smallQRCode["m_Title"]) lst = [] lst = smallQRCode["m_ResultList"] smallQRCodeData.setResultList(lst) scanResult.addSmallQRCodeData(smallQRCodeData) self.m_ScanResultList.append(scanResult)
def fromJSON( self,\ strParse ): size = len(strParse) for item in strParse: scanResult = ScanResult() #большой код bigQRCodeData = BigQRCodeData() bigQRCodeData.setDataFromJSON( item["m_BigQRCodeData"] ) scanResult.setBigQRCodeData(bigQRCodeData) scanResult.setIdToken( item["m_IdToken"] ) scanResult.setStatus(item["m_Status"]) #маленькие коды парсим smallQRCodeList = item["m_SmallQRCodeDataList"] for smallQRCode in smallQRCodeList: smallQRCodeData = SmallQRCodeData() smallQRCodeData.setData(smallQRCode["m_Title"]) lst = [] lst = smallQRCode["m_ResultList"] smallQRCodeData.setResultList(lst) scanResult.addSmallQRCodeData(smallQRCodeData) self.m_ScanResultList.append(scanResult)
def generateIdToken(): scanResult = ScanResult() scanResult.setStatus( BEFORE_SCAN ) return tokenFileWorker.addScanResult( scanResult )
def generateIdToken(): scanResult = ScanResult() scanResult.setStatus(BEFORE_SCAN) return tokenFileWorker.addScanResult(scanResult)
def receive(): log.info("receive......") while True: try: task = redishelper.getonetask() taskid = task['id'] plugin_url = task['url'] module_name = task['name'] ip = task['ip'] if not os.path.exists( os.path.join(os.path.abspath(__file__), 'scripts', module_name + '.py')): try: r = requests.get(plugin_url, timeout=10) if r.status_code == 200: with open( os.path.join( os.path.dirname( os.path.abspath("__file__")), 'scripts', module_name + ".py"), "wb") as f: f.write(r.content) else: log.error("下载脚本失败:{}".format(r)) ScanResult.sendmsg(taskid, "FAIL", False, "下载脚本失败:{}".format(r), node=socket.gethostname()) continue except Exception as re: log.error("收取消息后,处理失败:{},\ndetail-{}".format( re, traceback.format_exc())) ScanResult.sendmsg(taskid, "FAIL", False, "下载脚本失败:{}".format(re), node=socket.gethostname()) continue ScanResult.sendmsg(taskid, "RUNNING", False, "", node=socket.gethostname()) # 返回running run_proc = multiprocessing.Process(target=vul_handler, args=(module_name, ip, taskid)) run_proc.start() # 等待结束 while True: run_proc.join(timeout=60) if run_proc.is_alive(): if redishelper.needstop(taskid): log.info("has task cancle event. {}".format(taskid)) run_proc.terminate() run_proc.join() log.info("{} : task cancel........") ScanResult.sendmsg(taskid, "CANCEL", False, "", socket.gethostname()) else: log.info("不需要提前结束,继续等待检查完成......") continue else: break except Exception as err: log.error("task basic_consume error:", traceback.format_exc()) ScanResult.sendmsg(taskid, "FAIL", False, str(err), socket.gethostname()) time.sleep(30)
def startScan( sourceImage,\ idToken ): imageWorker = ImageWorker( sourceImage,\ PIL_IMAGE ) # Заносим информацию о том, что распознавание НАЧАЛОСЬ # также, создаем объект scanResult, который будет содержать в себе # всю информацию по результату распознавания try: tokenFileWorker = TokenFileWorker() scanResult = ScanResult() scanResult.setIdToken( idToken ) scanResult.setStatus( IN_PROGRESS ) tokenFileWorker.setScanResult( scanResult ) #ВАРИАНТ ГРУБОЙ СИЛЫ coordinateOfQRCode, imageWorker, symData = thirdVariantOfAlgorithm( imageWorker ) #sourceImage.save( "check1.png" ) #coordinateOfQRCode, sourceImage, symData = thirdVariantOfAlgorithm( sourceImage, \ # WAS_ROTATED ) sourceImage = imageWorker.getPILImage() #sourceImage.save( "OnlyForm.jpg" ) #sourceImage.save( "check.png" ) if ( len( coordinateOfQRCode ) > 0 ): bootomLeftCorners = coordinateOfQRCode[ 1 ] bottomRightCorners = coordinateOfQRCode[ 2 ] start_x = bottomRightCorners[ x ] - int ( ( bottomRightCorners[ x ] - bootomLeftCorners[ x ] ) / 2 ) start_y = bottomRightCorners[ y ] listOfQRCodes, dataList = findAllQRCodeOnColumn( imageWorker, start_x, start_y ) if ( len ( listOfQRCodes ) > 0 ): #выводим и записываем большой QR bigQRCodeData = BigQRCodeData() bigQRCodeData.parseDataFromStr( str( symData ) ) scanResult.setBigQRCodeData( bigQRCodeData ) sys.stdout.write( str( symData ) + "\n" ) #print( symData ) #начинаем вырезать ячейки по каждому коду for i in range( 0, int( len( listOfQRCodes) / 2 ) ): #print( dataList[ i ] ) smallQRCodeData = SmallQRCodeData() smallQRCodeData.setData( str( dataList[ i ] ) ) sys.stdout.write( str( dataList[ i ] ) + "\n" ) listOfResult = [] #fileNameImageWithCells = FOLDER_IMAGE_WITH_CELLS + \ # str( i ) + \ # IMAGE_FILENAME_IMAGE_WITH_CELLS imgWithCells = getImageWithCells( sourceImage, listOfQRCodes[ i * 2 + 1 ] ) thresholdValue = 200 squares, imgWithCellsThresh = find_squares( imgWithCells, imageWorker, thresholdValue ) #imageWorker.copyOpenCVImageToPIL(imgWithCellsThresh, 1) #imgWithCells = imgWithCellsThresh #cv2.imwrite("NEW_image_with_cells.jpg", imgWithCells) countOfCells = len ( squares ) #3 ячейки! cells = [] listOfResult = [] if ( countOfCells == 3 ): #изображения с ячейками for k in range ( 0, countOfCells): #imgWithCells.save("image_with_cells.jpg") #imageWorker.copyPILImageToOpenCV(imgWithCells) cellImage = getImageByContour( squares[ k ],\ imgWithCellsThresh) #cv2.imwrite("test_cell.jpg", cellImage) imageWorker.copyOpenCVImageToPIL( cellImage, 1 ) image = prepareCell( imageWorker.getPILImage(), \ sourceImage ) cells.append( image ) #image.save( cellFileName ) #image.save("cell.jpg") listOfResult.append( checkImageOnMark( image ) ) sys.stdout.write( str( listOfResult ) + "\n" ) #print( listOfResult ) else: # Если вдруг, по результатам алгоритма поиска ячеек (по контурам), # их оказалось БОЛЕЕ 3-ех. Тогда вырезаем ВРУЧНУЮ (опираясь на # ИЗВЕСТНОЕ расстояние между ячейками в пикселях. cellsDetector = CellsDetector( sourceImage,\ imgWithCells ) firstCellImg, secondCellImg, thirdCellImg = cellsDetector.start() listOfResult.append( checkImageOnMark( firstCellImg ) ) listOfResult.append( checkImageOnMark( secondCellImg ) ) listOfResult.append( checkImageOnMark( thirdCellImg ) ) sys.stdout.write( str( listOfResult ) + "\n" ) smallQRCodeData.setResultList( listOfResult ) scanResult.addSmallQRCodeData( smallQRCodeData ) scanResult.setStatus( SUCCESS ) else: #print( "there is no something about small QR codes :("); sys.stderr.write( str( SMALL_QR_CODES_ARE_NOT_HERE ) ) scanResult.setStatus( FILED_SMALL_QR_CODE ) else: sys.stderr.write( str( FORM_NOT_FOUNDED ) ) # Не найден большой QR код. scanResult.setStatus( FAILED_BIG_QR_CODE ) except BaseException: scanResult.setStatus( FAILED ) return scanResult
def startScan( sourceImage,\ idToken ): imageWorker = ImageWorker( sourceImage,\ PIL_IMAGE ) # Заносим информацию о том, что распознавание НАЧАЛОСЬ # также, создаем объект scanResult, который будет содержать в себе # всю информацию по результату распознавания try: tokenFileWorker = TokenFileWorker() scanResult = ScanResult() scanResult.setIdToken(idToken) scanResult.setStatus(IN_PROGRESS) tokenFileWorker.setScanResult(scanResult) #ВАРИАНТ ГРУБОЙ СИЛЫ coordinateOfQRCode, imageWorker, symData = thirdVariantOfAlgorithm( imageWorker) #sourceImage.save( "check1.png" ) #coordinateOfQRCode, sourceImage, symData = thirdVariantOfAlgorithm( sourceImage, \ # WAS_ROTATED ) sourceImage = imageWorker.getPILImage() #sourceImage.save( "OnlyForm.jpg" ) #sourceImage.save( "check.png" ) if (len(coordinateOfQRCode) > 0): bootomLeftCorners = coordinateOfQRCode[1] bottomRightCorners = coordinateOfQRCode[2] start_x = bottomRightCorners[x] - int( (bottomRightCorners[x] - bootomLeftCorners[x]) / 2) start_y = bottomRightCorners[y] listOfQRCodes, dataList = findAllQRCodeOnColumn( imageWorker, start_x, start_y) if (len(listOfQRCodes) > 0): #выводим и записываем большой QR bigQRCodeData = BigQRCodeData() bigQRCodeData.parseDataFromStr(str(symData)) scanResult.setBigQRCodeData(bigQRCodeData) sys.stdout.write(str(symData) + "\n") #print( symData ) #начинаем вырезать ячейки по каждому коду for i in range(0, int(len(listOfQRCodes) / 2)): #print( dataList[ i ] ) smallQRCodeData = SmallQRCodeData() smallQRCodeData.setData(str(dataList[i])) sys.stdout.write(str(dataList[i]) + "\n") listOfResult = [] #fileNameImageWithCells = FOLDER_IMAGE_WITH_CELLS + \ # str( i ) + \ # IMAGE_FILENAME_IMAGE_WITH_CELLS imgWithCells = getImageWithCells(sourceImage, listOfQRCodes[i * 2 + 1]) thresholdValue = 200 squares, imgWithCellsThresh = find_squares( imgWithCells, imageWorker, thresholdValue) #imageWorker.copyOpenCVImageToPIL(imgWithCellsThresh, 1) #imgWithCells = imgWithCellsThresh #cv2.imwrite("NEW_image_with_cells.jpg", imgWithCells) countOfCells = len(squares) #3 ячейки! cells = [] listOfResult = [] if (countOfCells == 3): #изображения с ячейками for k in range(0, countOfCells): #imgWithCells.save("image_with_cells.jpg") #imageWorker.copyPILImageToOpenCV(imgWithCells) cellImage = getImageByContour( squares[ k ],\ imgWithCellsThresh) #cv2.imwrite("test_cell.jpg", cellImage) imageWorker.copyOpenCVImageToPIL(cellImage, 1) image = prepareCell( imageWorker.getPILImage(), \ sourceImage ) cells.append(image) #image.save( cellFileName ) #image.save("cell.jpg") listOfResult.append(checkImageOnMark(image)) sys.stdout.write(str(listOfResult) + "\n") #print( listOfResult ) else: # Если вдруг, по результатам алгоритма поиска ячеек (по контурам), # их оказалось БОЛЕЕ 3-ех. Тогда вырезаем ВРУЧНУЮ (опираясь на # ИЗВЕСТНОЕ расстояние между ячейками в пикселях. cellsDetector = CellsDetector( sourceImage,\ imgWithCells ) firstCellImg, secondCellImg, thirdCellImg = cellsDetector.start( ) listOfResult.append(checkImageOnMark(firstCellImg)) listOfResult.append(checkImageOnMark(secondCellImg)) listOfResult.append(checkImageOnMark(thirdCellImg)) sys.stdout.write(str(listOfResult) + "\n") smallQRCodeData.setResultList(listOfResult) scanResult.addSmallQRCodeData(smallQRCodeData) scanResult.setStatus(SUCCESS) else: #print( "there is no something about small QR codes :("); sys.stderr.write(str(SMALL_QR_CODES_ARE_NOT_HERE)) scanResult.setStatus(FILED_SMALL_QR_CODE) else: sys.stderr.write(str(FORM_NOT_FOUNDED)) # Не найден большой QR код. scanResult.setStatus(FAILED_BIG_QR_CODE) except BaseException: scanResult.setStatus(FAILED) return scanResult