Пример #1
0
class jsonRPCServer(jsonrpc.JSONRPC):
    """
    An example object to be published.
    """

    def __init__(self, queryServer = None):
        ##ugur
        self.rpclogger = createLogger('RPC')
        self.rpclogger.info('Starting JSONRPCServer')
        self.queryServer = queryServer
        self.queryManager = QueryManager(store=self.queryServer.createStore(), sources=self.queryServer.config.sources, plugins=self.queryServer.config.plugins)

    def render(self, request):
        # check if db connection is lost or not!
        self.queryManager.setStore(self.queryServer.dbEnsureConnected(self.queryManager.store))
        return (jsonrpc.JSONRPC.render(self, request))

    def jsonrpc_push_alerts(self, plugin_ip, query_id_list, start_time, end_time):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.queryManager.pushAlerts(plugin_ip, query_id_list, start_time, end_time)

    def jsonrpc_push_statistics(self, plugin_id, query_id, number_of_flows, number_of_bytes, number_of_packets, time_window):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.queryManager.pushStatistics(plugin_ip, query_id_list, start_time, end_time)

    def jsonrpc_register(self,plugin_ip):
        result = []
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        # DEBUG mode da hangi fieldlarin hatali geldigini yazdirabiliriz tabiki sadece query server ' a.
        plugin = self.queryManager.store.find(Plugin, Plugin.plugin_ip == plugin_ip).one()
        #TODO Anywhere plugins registered flags not set. Flags must be define.
        if plugin is None:
            result.append(0);
            return result
        else:
            if plugin.registered == 1:
                result.append(1)
                return result
            if plugin.registered == 2:
                result.append(2)
                return result
            if plugin.registered == 3:
                result.append(3)
                return result
        return result
#    print organization
#    print prefix_list
#    print plugin_ip
#    print adm_publickey_file
#    print adm_tel
#    print adm_name
#    print adm_mail
#        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
#        # DEBUG mode da hangi fieldlarin hatali geldigini yazdirabiliriz tabiki sadece query server ' a.
#        #print "Registration information : %s,%s,%s,%s,%s,%s,%s" % (organization, adm_name, adm_mail, adm_tel, adm_publickey, prefix_list, plugin_ip)
#        self.store = db.get_store()
#        plugin = self.store.find(Plugin, Plugin.organization == unicode(organization)).one()
#        if plugin is None:
#            message =  'Your plugin is not registered to QueryServer yet.'
#            message += 'Plugin is not found.'
#            message += 'Please ask to QS Administrator about your registration process.'
#            self.rpclogger.info("AAAAAAAAAAa")
#            print message
#        result.append(0)
#        print result
#            return result
#        else:
#            checksum = hashlib.md5()
#            checksum.update( organization + adm_name + adm_mail +
#                             adm_tel      + adm_publickey_file  +
#                             prefix_list  + plugin_ip )
#            if checksum.hexdigest() != plugin.checksum:
#                message = 'Your plugin information doesn\'t match with the QueryServer side.'
#                message += 'Plugin Checksum Error'
#                message += 'Please check your information and try again.'
#            result.append(1)
#            print result
#                return result
#               # print message
#            elif checksum.hexdigest() == plugin.checksum:
#                # Set the plugin registered
#                plugin.registered = True
#                self.store.add(plugin)
#                self.store.commit()
#                message =  'Your plugin is registered.\n'
#                message += 'Feel free to checkout query subscriptions.'
#                #print message
#            result.append(2)
#            print result
#                return result
#                #return self.jsonrpc_get_subscriptions()

    def jsonrpc_get_statistics(self, alert_id):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        result = self.queryManager.getStatistics(alert_id)
        return result

    def jsonrpc_get_topn_query(self, n):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        result = self.queryManager.getTopNQuery(n)
        return result


    def jsonrpc_get_query_filter(self,query_id):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('returning query filter')
        return self.queryManager.getFilter(query_id)


    def jsonrpc_get_subscription_detail(self, subscription):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('returning subscriptions detail')
        return self.queryManager.getSubscription(subscription)

    def jsonrpc_get_subscriptions(self):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('returning subscriptions')
        subs = self.queryManager.getAllSubscriptions()
        return subs


    def jsonrpc_get_subscription(self, name, method_call):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('getting subscription information')
        return self.queryManager.getSubscription(name, method_call)



    def jsonrpc_get_all_prefixes(self):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('getting all prefix list information')
        plugin_list = self.queryManager.store.find(Plugin)
        prefix_list = {}
        for plugin in plugin_list:
            prefix_list[plugin.id] = plugin.prefix.prefix.replace(" ","").split(',')
        print prefix_list
        return prefix_list


    def jsonrpc_get_plugin_id(self, ip_address):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('getting plugin id of ip address')
        return self.queryManager.getPluginId(ip_address)

    def jsonrpc_get_prefixes(self, ip_address):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('getting prefix list information')
        plugin = self.queryManager.store.find( Plugin,
                                     Plugin.plugin_ip == unicode(ip_address)
                                   ).one()
        if not plugin:
            self.rpclogger.warning('Plugin ip is not correct')
            self.rpclogger.warning('Can not return prefix list')
            return
        else:
             p_list = {}
             p_list[plugin.id] = plugin.prefix.prefix.replace(" ","").split(',')
             return p_list


    def jsonrpc_get_alert(self, alert):
        print '\n'
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        result = self.queryManager.registerAlert(alert)
        return result

    def jsonrpc_get_my_alerts(self, plugin_ip):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        return self.queryManager.getMyAlerts(plugin_ip)

    def jsonrpc_generate_query(self, query_info_list, mandatory, plugin_ip):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        return self.queryManager.generateQuery(query_info_list, mandatory, plugin_ip)
Пример #2
0
class jsonRPCServer(jsonrpc.JSONRPC):
    """
    An example object to be published.
    """
    def __init__(self, queryServer=None):
        ##ugur
        self.rpclogger = createLogger('RPC')
        self.rpclogger.info('Starting JSONRPCServer')
        self.queryServer = queryServer
        self.queryManager = QueryManager(
            store=self.queryServer.createStore(),
            sources=self.queryServer.config.sources,
            plugins=self.queryServer.config.plugins)

    def render(self, request):
        # check if db connection is lost or not!
        self.queryManager.setStore(
            self.queryServer.dbEnsureConnected(self.queryManager.store))
        return (jsonrpc.JSONRPC.render(self, request))

    def jsonrpc_push_alerts(self, plugin_ip, query_id_list, start_time,
                            end_time):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.queryManager.pushAlerts(plugin_ip, query_id_list, start_time,
                                     end_time)

    def jsonrpc_push_statistics(self, plugin_id, query_id, number_of_flows,
                                number_of_bytes, number_of_packets,
                                time_window):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.queryManager.pushStatistics(plugin_ip, query_id_list, start_time,
                                         end_time)

    def jsonrpc_register(self, plugin_ip):
        result = []
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        # DEBUG mode da hangi fieldlarin hatali geldigini yazdirabiliriz tabiki sadece query server ' a.
        plugin = self.queryManager.store.find(
            Plugin, Plugin.plugin_ip == plugin_ip).one()
        #TODO Anywhere plugins registered flags not set. Flags must be define.
        if plugin is None:
            result.append(0)
            return result
        else:
            if plugin.registered == 1:
                result.append(1)
                return result
            if plugin.registered == 2:
                result.append(2)
                return result
            if plugin.registered == 3:
                result.append(3)
                return result
        return result
#    print organization
#    print prefix_list
#    print plugin_ip
#    print adm_publickey_file
#    print adm_tel
#    print adm_name
#    print adm_mail
#        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
#        # DEBUG mode da hangi fieldlarin hatali geldigini yazdirabiliriz tabiki sadece query server ' a.
#        #print "Registration information : %s,%s,%s,%s,%s,%s,%s" % (organization, adm_name, adm_mail, adm_tel, adm_publickey, prefix_list, plugin_ip)
#        self.store = db.get_store()
#        plugin = self.store.find(Plugin, Plugin.organization == unicode(organization)).one()
#        if plugin is None:
#            message =  'Your plugin is not registered to QueryServer yet.'
#            message += 'Plugin is not found.'
#            message += 'Please ask to QS Administrator about your registration process.'
#            self.rpclogger.info("AAAAAAAAAAa")
#            print message
#        result.append(0)
#        print result
#            return result
#        else:
#            checksum = hashlib.md5()
#            checksum.update( organization + adm_name + adm_mail +
#                             adm_tel      + adm_publickey_file  +
#                             prefix_list  + plugin_ip )
#            if checksum.hexdigest() != plugin.checksum:
#                message = 'Your plugin information doesn\'t match with the QueryServer side.'
#                message += 'Plugin Checksum Error'
#                message += 'Please check your information and try again.'
#            result.append(1)
#            print result
#                return result
#               # print message
#            elif checksum.hexdigest() == plugin.checksum:
#                # Set the plugin registered
#                plugin.registered = True
#                self.store.add(plugin)
#                self.store.commit()
#                message =  'Your plugin is registered.\n'
#                message += 'Feel free to checkout query subscriptions.'
#                #print message
#            result.append(2)
#            print result
#                return result
#                #return self.jsonrpc_get_subscriptions()

    def jsonrpc_get_statistics(self, alert_id):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        result = self.queryManager.getStatistics(alert_id)
        return result

    def jsonrpc_get_topn_query(self, n):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        result = self.queryManager.getTopNQuery(n)
        return result

    def jsonrpc_get_query_filter(self, query_id):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('returning query filter')
        return self.queryManager.getFilter(query_id)

    def jsonrpc_get_subscription_detail(self, subscription):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('returning subscriptions detail')
        return self.queryManager.getSubscription(subscription)

    def jsonrpc_get_subscriptions(self):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('returning subscriptions')
        subs = self.queryManager.getAllSubscriptions()
        return subs

    def jsonrpc_get_subscription(self, name, method_call):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('getting subscription information')
        return self.queryManager.getSubscription(name, method_call)

    def jsonrpc_get_all_prefixes(self):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('getting all prefix list information')
        plugin_list = self.queryManager.store.find(Plugin)
        prefix_list = {}
        for plugin in plugin_list:
            prefix_list[plugin.id] = plugin.prefix.prefix.replace(
                " ", "").split(',')
        print prefix_list
        return prefix_list

    def jsonrpc_get_plugin_id(self, ip_address):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('getting plugin id of ip address')
        return self.queryManager.getPluginId(ip_address)

    def jsonrpc_get_prefixes(self, ip_address):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        self.rpclogger.debug('getting prefix list information')
        plugin = self.queryManager.store.find(
            Plugin, Plugin.plugin_ip == unicode(ip_address)).one()
        if not plugin:
            self.rpclogger.warning('Plugin ip is not correct')
            self.rpclogger.warning('Can not return prefix list')
            return
        else:
            p_list = {}
            p_list[plugin.id] = plugin.prefix.prefix.replace(" ",
                                                             "").split(',')
            return p_list

    def jsonrpc_get_alert(self, alert):
        print '\n'
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        result = self.queryManager.registerAlert(alert)
        return result

    def jsonrpc_get_my_alerts(self, plugin_ip):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        return self.queryManager.getMyAlerts(plugin_ip)

    def jsonrpc_generate_query(self, query_info_list, mandatory, plugin_ip):
        self.rpclogger.debug('In %s' % sys._getframe().f_code.co_name)
        return self.queryManager.generateQuery(query_info_list, mandatory,
                                               plugin_ip)