예제 #1
0
class Main():
    def __init__(self):
        self.runTime = None
        self.ranges = []
        self.progPath = os.path.dirname(os.path.realpath(__file__))
        self.confFiles = ['main.conf']
        self.start = time.time()
        self.confD = self.checkConfig()
        self.logger = Logger(logpath=self.confD['logdir'])
        self.pid = self.checkPID()

    def checkPID(self):
        self.logger.writeToLog(text='Checking for PID file...',
                               lType='startup')
        curPid = str(os.getpid())
        if os.path.isfile('my.pid'):
            self.logger.writeToLog(text='Found old PID file', lType='startup')
            fpid = open('my.pid', 'r')
            oldPid = fpid.read()
            fpid.close()

            if oldPid == curPid:
                self.logger.writeToLog(
                    text='Already running with pid {}, exiting!'.format(
                        curPid))
                sys.exit(0)
            else:
                self.logger.writeToLog(text='Old PID file, cleaning up...',
                                       lType='startup')
                os.remove('my.pid')
        if not os.path.isfile('my.pid'):
            self.logger.writeToLog(text='Writing out pid {}'.format(curPid),
                                   lType='startup')
            fpid = open('my.pid', 'w')
            fpid.write(curPid)
            fpid.close()
            return curPid

    def checkConfig(self):
        #self.logger.writeToLog('Checking my config files')
        for cFile in self.confFiles:
            confFile = os.path.join(self.progPath, 'conf', cFile)
            if os.path.isfile(confFile):
                #       self.logger.writeToLog('Reading {}'.format(confFile), lType='startup')
                with open(confFile, 'r') as f:
                    config = f.readlines()
                    self.confD = {}
                    for line in config:
                        lineL = line.split('    ')
                        confI = lineL[0]
                        confL = confI.split('=')
                        self.confD[confL[0]] = confL[1]

                f.close()
                print(self.confD)
                return self.confD
            else:
                #      self.logger.writeToLog('Config file not found {}'.format(cFile), lType='startup')
                sys.exit(0)

    def main(self):

        self.logger.writeToLog(text='Starting Daemon...')

        self.ranges.append(self.confD['range'])  #Fix this later
        while True:
            startTime = time.time()
            for ipRange in self.ranges:
                self.logger.writeToLog(text='Starting new scan')
                print('[*] starting scan on {}...'.format(ipRange))
                scanner = Scanner(ipRange)
                scanner.scan()
                if not os.path.isfile('data/inventory.csv'):
                    self.logger.writeToLog(
                        'No inventory, running initial setup!')
                    scanner.scan(False)

            end = time.time()
            self.logger.writeToLog(
                text='Scan completed in {} seconds'.format(end - startTime))
            print('\n[*] Scan completed in {} seconds\n'.format(end -
                                                                startTime))
            self.logger.writeToLog('Checking scans...')
            checkrogue = CheckRogue()
            checkrogue.removeOld(int(self.confD['backlog']))
            newDevices = checkrogue.checkRogue()
            if newDevices:
                checkScans = CheckInventory(newDevices)
                checkScans.readInventory()
                checkScans.compareHosts(newDevices)
            else:
                self.logger.writeToLog('No new devices')

            self.logger.cleanupLogs(rotate=int(self.confD['logrotate']))
            print('[*] Sleeping for {} seconds...\n'.format(
                self.confD['wait']))
            time.sleep(int(self.confD['wait']))