mirror of https://github.com/CIRCL/AIL-framework
				
				
				
			
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
#!/usr/bin/env python3
 | 
						|
# -*- coding: utf-8 -*-
 | 
						|
#
 | 
						|
# This file is part of AIL framework - Analysis Information Leak framework
 | 
						|
#
 | 
						|
# This a simple feeder script feeding data from pystemon to AIL.
 | 
						|
#
 | 
						|
# Don't forget to set your pystemonpath and ensure that the
 | 
						|
# configuration matches this script. Default is Redis DB 10.
 | 
						|
# https://github.com/cvandeplas/pystemon/blob/master/pystemon.yaml#L52
 | 
						|
#
 | 
						|
 | 
						|
import os
 | 
						|
import sys
 | 
						|
import redis
 | 
						|
 | 
						|
sys.path.append(os.environ['AIL_BIN'])
 | 
						|
##################################
 | 
						|
# Import Project packages
 | 
						|
##################################
 | 
						|
from importer.abstract_importer import AbstractImporter
 | 
						|
from modules.abstract_module import AbstractModule
 | 
						|
from lib.ConfigLoader import ConfigLoader
 | 
						|
 | 
						|
from lib.objects.Items import Item
 | 
						|
 | 
						|
class PystemonImporter(AbstractImporter):
 | 
						|
    def __init__(self, pystemon_dir, host='localhost', port=6379, db=10):
 | 
						|
        super().__init__()
 | 
						|
        # Check Pystemon Redis Config:
 | 
						|
        #       https://github.com/cvandeplas/pystemon/blob/master/pystemon.yaml#L54
 | 
						|
        self.r_pystemon = redis.StrictRedis(host=host, port=port, db=db, decode_responses=True)
 | 
						|
        self.dir_pystemon = pystemon_dir
 | 
						|
 | 
						|
    def importer(self):
 | 
						|
        item_id = self.r_pystemon.lpop("pastes")
 | 
						|
        print(item_id)
 | 
						|
        if item_id:
 | 
						|
            print(item_id)
 | 
						|
            full_item_path = os.path.join(self.dir_pystemon, item_id)  # TODO SANITIZE PATH
 | 
						|
            # Check if pystemon file exists
 | 
						|
            if not os.path.isfile(full_item_path):
 | 
						|
                print(f'Error: {full_item_path}, file not found')
 | 
						|
                return None
 | 
						|
            # Get Item Content
 | 
						|
            try:
 | 
						|
                with open(full_item_path, 'rb') as f:
 | 
						|
                    content = f.read()
 | 
						|
                if not content:
 | 
						|
                    return None
 | 
						|
 | 
						|
                if full_item_path[-3:] == '.gz':
 | 
						|
                    gzipped = True
 | 
						|
                else:
 | 
						|
                    gzipped = False
 | 
						|
 | 
						|
                # TODO handle multiple objects
 | 
						|
                source = 'pystemon'
 | 
						|
                message = self.create_message(content, gzipped=gzipped, source=source)
 | 
						|
                self.logger.info(f'{source} {item_id}')
 | 
						|
                return item_id, message
 | 
						|
 | 
						|
            except IOError as e:
 | 
						|
                self.logger.error(f'Error {e}: {full_item_path}, IOError')
 | 
						|
        return None
 | 
						|
 | 
						|
 | 
						|
class PystemonModuleImporter(AbstractModule):
 | 
						|
 | 
						|
    def __init__(self):
 | 
						|
        super().__init__()
 | 
						|
        self.pending_seconds = 10
 | 
						|
        config_loader = ConfigLoader()
 | 
						|
        # TODO MIGRATE OLD CONFIG
 | 
						|
        # dir_pystemon = config_loader.get_config_str("Directories", "pystemonpath")
 | 
						|
        # Check Pystemon Redis Config:
 | 
						|
        #       https://github.com/cvandeplas/pystemon/blob/master/pystemon.yaml#L54
 | 
						|
        dir_pystemon = config_loader.get_config_str("Pystemon", "dir")
 | 
						|
        host = config_loader.get_config_str("Pystemon", "redis_host")
 | 
						|
        port = config_loader.get_config_str("Pystemon", "redis_port")
 | 
						|
        db = config_loader.get_config_str("Pystemon", "redis_db")
 | 
						|
        self.importer = PystemonImporter(dir_pystemon, host=host, port=port, db=db)
 | 
						|
 | 
						|
    def get_message(self):
 | 
						|
        return self.importer.importer()
 | 
						|
 | 
						|
    def compute(self, message):
 | 
						|
        if message:
 | 
						|
            item_id, message = message
 | 
						|
            item = Item(item_id)
 | 
						|
            self.add_message_to_queue(obj=item, message=message)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    module = PystemonModuleImporter()
 | 
						|
    module.run()
 |