示例#1
0
    def on_config_error_menu(self, item):
        """Show configuration error (unused object and unbinded rules) in new pages"""
        if not self.node.object.unused_objects and not self.node.object.unbounded_rules:
            Gtk_DialogBox("No error found !")
            return

        treeview = Gtk_TreeView("Configuration error (%s)" %
                                self.node.object.hostname)
        if self.node.object.unused_objects:
            p_iter1 = treeview.add_row(None, "Unused objects", 'black',
                                       '#B9B9B9')
            count = 0
            for i in self.node.object.unused_objects:
                treeview.add_row(p_iter1, "Unused object: " + i, 'black',
                                 '#FFFFFF' if count % 2 else '#DCDCDC')
                count += 1

        if self.node.object.unbounded_rules:
            p_iter1 = treeview.add_row(None, "Unbounded rules", 'black',
                                       '#B9B9B9')
            count = 0
            for i in self.node.object.unbounded_rules:
                treeview.add_row(p_iter1, "Unbounded rule: " + i, 'black',
                                 '#FFFFFF' if count % 2 else '#DCDCDC')
                count += 1
        Gtk_Main.Gtk_Main().notebook.add_tab(
            treeview.scrolled_window,
            "Configuration error (%s)" % self.node.object.hostname,
            can_close=True,
            ref=self.node.object,
            export=Gtk_Export.export_error_configuration)
        Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(
            Gtk_Message.ON_ERROR_CONFIG)
示例#2
0
def treeview_output(query_path):
    """Add a tab in the notebook showing the result of the query path.

    Parameters
    ----------
    query_path : list. List of query path result to show
    """
    result = query_path.result
    treeview = Gtk_TreeView("Query Path Import")
    for i in result:
        rule = i[0]
        path_data = i[1]
        fg_color = 'darkred' if not path_data else '#DDDD00' if isinstance(path_data[0], str) else 'darkgreen'
        p0 = treeview.add_row(None, rule.to_string(' '), fg_color, '#969696')
        if isinstance(path_data, str):
            treeview.add_row(p0, path_data, 'black', '#B9B9B9')
            continue
        for data in path_data:
            p1 = treeview.add_row(p0, path_to_string(data[0], ' '), 'black', '#B9B9B9')
            count = 0
            for r in data[1]:
                treeview.add_row(p1, r[1].to_string(' '), 'black', '#DCDCDC' if count % 2 else '#FFFFFF')
                count += 1
    Gtk_Main.Gtk_Main().notebook.add_tab(treeview.scrolled_window, "Query path import", can_close=True,
                                         ref=query_path, export=Gtk_Export.export_query_path)
    def on_object_menu(self, item):
        """Show all element in dictionary in a new tab"""
        od = collections.OrderedDict(sorted(self.node.object.get_objects().items()))

        if not od:
            Gtk_DialogBox("No object found !")
            return

        object_dictionary = Gtk_TreeView("Object list")

        for k, v in od.items():
            p_iter = object_dictionary.add_row(None, k, 'black', '#969696')
            for k1, v1 in self.node.object.resolve(k).items():
                p_iter2 = object_dictionary.add_row(p_iter, k1, 'black', '#B9B9B9')
                count = 0
                for e in v1:
                    object_dictionary.add_row(p_iter2, e, 'black', '#FFFFFF' if count % 2 else '#DCDCDC')
                    count += 1
            rule_list = list(set([i for i in v if isinstance(i, Rule.Rule)]))
            if rule_list:
                p_iter2 = object_dictionary.add_row(p_iter, 'Rule', 'black', '#B9B9B9')
                count = 0
                for e in rule_list:
                    object_dictionary.add_row(p_iter2, e.to_string(' '), 'black', '#FFFFFF' if count % 2 else '#DCDCDC')
                    count += 1


        Gtk_Main.Gtk_Main().notebook.add_tab(object_dictionary.scrolled_window,
                                             "Object list (%s)" % self.node.object.hostname,
                                             can_close=True)
        Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(Gtk_Message.ON_SHOW_OBJECT)
示例#4
0
    def on_object_menu(self, item):
        """Show all element in dictionary in a new tab"""
        od = collections.OrderedDict(
            sorted(self.node.object.get_objects().items()))

        if not od:
            Gtk_DialogBox("No object found !")
            return

        object_dictionary = Gtk_TreeView("Object list")

        for k, v in od.items():
            p_iter = object_dictionary.add_row(None, k, 'black', '#969696')
            for k1, v1 in self.node.object.resolve(k).items():
                p_iter2 = object_dictionary.add_row(p_iter, k1, 'black',
                                                    '#B9B9B9')
                count = 0
                for e in v1:
                    object_dictionary.add_row(
                        p_iter2, e, 'black',
                        '#FFFFFF' if count % 2 else '#DCDCDC')
                    count += 1
            rule_list = list(set([i for i in v if isinstance(i, Rule.Rule)]))
            if rule_list:
                p_iter2 = object_dictionary.add_row(p_iter, 'Rule', 'black',
                                                    '#B9B9B9')
                count = 0
                for e in rule_list:
                    object_dictionary.add_row(
                        p_iter2, e.to_string(' '), 'black',
                        '#FFFFFF' if count % 2 else '#DCDCDC')
                    count += 1

        Gtk_Main.Gtk_Main().notebook.add_tab(object_dictionary.scrolled_window,
                                             "Object list (%s)" %
                                             self.node.object.hostname,
                                             can_close=True)
        Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(
            Gtk_Message.ON_SHOW_OBJECT)
示例#5
0
    def add_distributed_anomaly_tab(self, distributed_detection):
        """Add an distributed anomaly page

        Parameters
        ----------
        obj : the distributed anomaly instance
        """
        def on_cursor_changed(tree_view):
            tree_row = tree_view.get_selection().get_selected()[1]
            if not tree_row:
                return
            model = tree_view.get_model()
            lateral_pane = Gtk_Main.Gtk_Main().lateral_pane
            lateral_pane.details.clear()
            if not model[tree_row].parent:
                lateral_pane.details.add_row("")
            else:
                lateral_pane.details.add_row(
                    AnomalyError.get_error_help(model[tree_row][0],
                                                'distributed'))
            lateral_pane.focus_details()

        distributed_anomaly = Gtk_TreeView("Anomaly detection (distributed)")
        distributed_anomaly.treeview.connect('cursor-changed',
                                             on_cursor_changed)
        self._add_distributed_anomaly(distributed_detection.error_path,
                                      distributed_anomaly)
        self.search_bar = Gtk_SearchBar(distributed_detection,
                                        distributed_anomaly,
                                        distributed_anomaly.scrolled_window)
        self.add_tab(self.search_bar.vbox,
                     "Anomaly (Distributed)",
                     can_close=True,
                     ref=distributed_detection,
                     export=Gtk_Export.export_distributed_detection)
        Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(
            Gtk_Message.ON_DISTRIBUTED_ANOMALY)
    def on_config_error_menu(self, item):
        """Show configuration error (unused object and unbinded rules) in new pages"""
        if not self.node.object.unused_objects and not self.node.object.unbounded_rules:
            Gtk_DialogBox("No error found !")
            return

        treeview = Gtk_TreeView("Configuration error (%s)" % self.node.object.hostname)
        if self.node.object.unused_objects:
            p_iter1 = treeview.add_row(None, "Unused objects", 'black', '#B9B9B9')
            count = 0
            for i in self.node.object.unused_objects:
                treeview.add_row(p_iter1, "Unused object: " + i, 'black', '#FFFFFF' if count % 2 else '#DCDCDC')
                count += 1

        if self.node.object.unbounded_rules:
            p_iter1 = treeview.add_row(None, "Unbounded rules", 'black', '#B9B9B9')
            count = 0
            for i in self.node.object.unbounded_rules:
                treeview.add_row(p_iter1, "Unbounded rule: " + i, 'black', '#FFFFFF' if count % 2 else '#DCDCDC')
                count += 1
        Gtk_Main.Gtk_Main().notebook.add_tab(treeview.scrolled_window, "Configuration error (%s)" % self.node.object.hostname,
                                             can_close=True, ref=self.node.object, export=Gtk_Export.export_error_configuration)
        Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(Gtk_Message.ON_ERROR_CONFIG)
示例#7
0
    def on_service_menu(self, item):
        """Show all service enable in a new tab"""
        service_list = Gtk_TreeView("Service list")
        p_iter_dict = {}
        handler_id = None

        def on_service_row_expanded(treeview, iter, path, p_iter_dict):
            model = treeview.get_model()
            if not (model[iter].parent and not model[iter].parent.parent):
                return
            treeview.freeze_child_notify()
            treeview.set_model(None)
            min = p_iter_dict[model[iter][0]][0]
            max = p_iter_dict[model[iter][0]][1]
            if model[iter].parent[0] == 'TCP':
                od = collections.OrderedDict(
                    sorted(
                        self.node.object.get_services(min, max,
                                                      'tcp').items()))
            elif model[iter].parent[0] == 'UDP':
                od = collections.OrderedDict(
                    sorted(
                        self.node.object.get_services(min, max,
                                                      'udp').items()))
            else:
                od = collections.OrderedDict(
                    sorted(
                        self.node.object.get_services(min, max, None).items()))
            iter_child = model.iter_children(iter)
            # apparently if we remove all, even if we add rows after, the row doesn't expand
            # so we least just 1 who we remove later
            while model.iter_n_children(iter) > 1:
                model.remove(iter_child)
                iter_child = model.iter_children(iter)
            for k, v in od.items():
                name = Port.Port.get_service_name(k)
                p_iter1 = model.append(
                    iter, [name if name else k, 'black', '#B9B9B9'])
                count = 0
                for e in list(set(v)):
                    model.append(p_iter1, [
                        e.to_string(' '), 'black',
                        '#FFFFFF' if count % 2 else '#DCDCDC'
                    ])
                    count += 1
            treeview.set_model(model)
            treeview.thaw_child_notify()
            # remove the first one see above why
            model.remove(model.iter_children(iter))
            # disconnect handler and force expand
            treeview.handler_block(handler_id)
            treeview.expand_to_path(path)
            treeview.handler_unblock(handler_id)

        Gtk_Main.Gtk_Main().create_progress_bar("Services", 3 * 2**6)
        for j in xrange(0, 3):
            if j == 0:
                protocol = 'tcp'
                p_proto = service_list.add_row(None, "TCP", 'black', '#737373')
            elif j == 1:
                protocol = 'udp'
                p_proto = service_list.add_row(None, "UDP", 'black', '#737373')
            else:
                protocol = None
                p_proto = service_list.add_row(None, "IP", 'black', '#737373')
            for i in xrange(0, 2**16, 2**10):
                Gtk_Main.Gtk_Main().update_interface()
                Gtk_Main.Gtk_Main().update_progress_bar(1)
                if self.node.object.get_services(i, i + 2**10 - 1, protocol):
                    p_iter = service_list.add_row(
                        p_proto, "[ %i - %i ]" % (i, i + 2**10 - 1), 'black',
                        '#969696')
                    p_iter_dict["[ %i - %i ]" %
                                (i, i + 2**10 - 1)] = (i, i + 2**10 - 1)
                    service_list.add_row(p_iter, ' ', 'black', '#FFFFFF')
        Gtk_Main.Gtk_Main().destroy_progress_bar()

        handler_id = service_list.treeview.connect("row-expanded",
                                                   on_service_row_expanded,
                                                   p_iter_dict)

        Gtk_Main.Gtk_Main().notebook.add_tab(service_list.scrolled_window,
                                             "Service list (%s)" %
                                             self.node.object.hostname,
                                             can_close=True)
        Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(
            Gtk_Message.ON_SHOW_SERVICE)
    def on_service_menu(self, item):
        """Show all service enable in a new tab"""
        service_list = Gtk_TreeView("Service list")
        p_iter_dict = {}
        handler_id = None

        def on_service_row_expanded(treeview, iter, path, p_iter_dict):
            model = treeview.get_model()
            if not (model[iter].parent and not model[iter].parent.parent):
                return
            treeview.freeze_child_notify()
            treeview.set_model(None)
            min = p_iter_dict[model[iter][0]][0]
            max = p_iter_dict[model[iter][0]][1]
            if model[iter].parent[0] == 'TCP':
                od = collections.OrderedDict(sorted(self.node.object.get_services(min, max, 'tcp').items()))
            elif model[iter].parent[0] == 'UDP':
                od = collections.OrderedDict(sorted(self.node.object.get_services(min, max, 'udp').items()))
            else:
                od = collections.OrderedDict(sorted(self.node.object.get_services(min, max, None).items()))
            iter_child = model.iter_children(iter)
            # apparently if we remove all, even if we add rows after, the row doesn't expand
            # so we least just 1 who we remove later
            while model.iter_n_children(iter) > 1:
                model.remove(iter_child)
                iter_child = model.iter_children(iter)
            for k, v in od.items():
                name = Port.Port.get_service_name(k)
                p_iter1 = model.append(iter, [name if name else k, 'black', '#B9B9B9'])
                count = 0
                for e in list(set(v)):
                    model.append(p_iter1, [e.to_string(' '), 'black', '#FFFFFF' if count % 2 else '#DCDCDC'])
                    count += 1
            treeview.set_model(model)
            treeview.thaw_child_notify()
            # remove the first one see above why
            model.remove(model.iter_children(iter))
            # disconnect handler and force expand
            treeview.handler_block(handler_id)
            treeview.expand_to_path(path)
            treeview.handler_unblock(handler_id)

        Gtk_Main.Gtk_Main().create_progress_bar("Services", 3*2**6)
        for j in xrange(0, 3):
            if j == 0:
                protocol = 'tcp'
                p_proto = service_list.add_row(None, "TCP", 'black', '#737373')
            elif j == 1:
                protocol = 'udp'
                p_proto = service_list.add_row(None, "UDP", 'black', '#737373')
            else:
                protocol = None
                p_proto = service_list.add_row(None, "IP", 'black', '#737373')
            for i in xrange(0, 2**16, 2**10):
                Gtk_Main.Gtk_Main().update_interface()
                Gtk_Main.Gtk_Main().update_progress_bar(1)
                if self.node.object.get_services(i, i + 2**10 - 1, protocol):
                    p_iter = service_list.add_row(p_proto, "[ %i - %i ]" % (i, i + 2**10 - 1), 'black', '#969696')
                    p_iter_dict["[ %i - %i ]" % (i, i + 2**10 - 1)] = (i, i + 2**10 - 1)
                    service_list.add_row(p_iter, ' ', 'black', '#FFFFFF')
        Gtk_Main.Gtk_Main().destroy_progress_bar()


        handler_id = service_list.treeview.connect("row-expanded", on_service_row_expanded, p_iter_dict)

        Gtk_Main.Gtk_Main().notebook.add_tab(service_list.scrolled_window,
                                             "Service list (%s)" % self.node.object.hostname,
                                             can_close=True)
        Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(Gtk_Message.ON_SHOW_SERVICE)