def setScanStatus( self,\
                     idToken,\
                     status ):
                 scanResult = ScanResult()
                 scanResult.setIdToken( idToken )
                 scanResult.setStatus( status )
                 self.setScanResult( scanResult )
Beispiel #2
0
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())
Beispiel #3
0
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)
Beispiel #4
0
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."
Beispiel #5
0
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))
Beispiel #6
0
    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)
Beispiel #8
0
    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)
Beispiel #10
0
def generateIdToken():
    
    scanResult = ScanResult()
    scanResult.setStatus( BEFORE_SCAN )
    
    return tokenFileWorker.addScanResult( scanResult )
Beispiel #11
0
def generateIdToken():

    scanResult = ScanResult()
    scanResult.setStatus(BEFORE_SCAN)

    return tokenFileWorker.addScanResult(scanResult)
Beispiel #12
0
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)
Beispiel #13
0
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