diffcompare.py

来自「Ubuntu packages of security software。 相」· Python 代码 · 共 1,081 行 · 第 1/3 页

PY
1,081
字号
                            self.diff = Diff(self.text1, self.text2)                self.text_view.txt_diff_result.get_buffer().set_text\                               ('\n'.join(self.diff.generate_without_banner()))                self.text_view.activate_color(self.check_color.get_active())                self.text_view._text_changed(None)    def resize_vpane(self, widget):        exp1 = not widget.get_expanded()        if widget == self.scan_chooser1.exp_scan:            exp2 = self.scan_chooser2.exp_scan.get_expanded()        else:            exp2 = self.scan_chooser1.exp_scan.get_expanded()        if not exp1 and not exp2:            self.vpaned.compute_position(-1, 0, 500)            self.size_allocate(gtk.gdk.Rectangle(width=self.initial_size[0],                                                 height=self.initial_size[1]))            self.queue_resize()    def _change_to_text(self, widget):        if not widget.get_active():            return        self.umit_conf.diff_mode = "text"        children = self.hbox_result.get_children()        if children:            self.hbox_result.remove(children[0])            self.compare_view.hide()                self.hbox_result._pack_expand_fill(self.text_view)        self.text_view.show_all()                self.compare_mode.set_active(False)        self.text_changed(None)    def _change_to_compare(self, widget):        if not widget.get_active():            return        self.umit_conf.diff_mode = "compare"        children = self.hbox_result.get_children()        if children:            self.hbox_result.remove(children[0])            self.text_view.hide()                self.hbox_result._pack_expand_fill(self.compare_view)        self.compare_view.show_all()                self.text_mode.set_active(False)        self.text_changed(None)    def _set_color(self, widget):        activate = widget.get_active()        self.umit_conf.colored_diff = activate        self.compare_view.activate_color(activate)        self.text_view.activate_color(activate)    def close(self, widget=None, extra=None):        self.destroy()class DiffText(HIGVBox, object):    def __init__ (self, colors, check_color):        HIGVBox.__init__(self)        self.set_border_width(5)        self.set_spacing(6)        self.colors = colors        self.check_color = check_color                self._create_widgets()        self._pack_hbox()        self._set_text_view()        self._set_scrolled()                self._pack_noexpand_nofill(self.lbl_diff)        self._pack_expand_fill(self.hbox)        def _create_widgets (self):        self.hbox = HIGHBox ()        self.lbl_diff = HIGSectionLabel ("<b>%s</b>" % _("Diff Result"))        self.scrolled = gtk.ScrolledWindow()        self.txt_diff_result = gtk.TextView()        self.txg_tag = gtk.TextTag ("diff_style")        self.txg_added = gtk.TextTag ('added style')        self.txg_removed = gtk.TextTag ('removed style')    def _pack_hbox (self):        self.hbox.set_border_width(5)        self.hbox._pack_noexpand_nofill (hig_box_space_holder())        self.hbox._pack_expand_fill(self.scrolled)    def _set_scrolled (self):        self.scrolled.set_size_request(-1, 250)                # Packing text view into scrolled window        self.scrolled.add_with_viewport(self.txt_diff_result)                # Setting scrolled window        self.scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)    def activate_color(self, activate):        self.check_color = activate        self._text_changed(None)        def _set_text_view (self):        self.txg_table = self.txt_diff_result.get_buffer().get_tag_table()        self.txg_table.add(self.txg_tag)        self.txg_table.add(self.txg_added)        self.txg_table.add(self.txg_removed)        self.txg_tag.set_property("family", "Monospace")        self.txg_added.set_property("background-gdk", self.colors.added)        self.txg_removed.set_property("background-gdk", self.colors.not_present)                self.txt_diff_result.set_wrap_mode(gtk.WRAP_WORD)        self.txt_diff_result.set_editable(False)        self.txt_diff_result.get_buffer().connect("changed", self._text_changed)            def _text_changed (self, widget):        self.txg_added.set_property("background-gdk", self.colors.added)        self.txg_removed.set_property("background-gdk", self.colors.not_present)                buff = self.txt_diff_result.get_buffer()        buff.apply_tag(self.txg_tag, buff.get_start_iter(), buff.get_end_iter())        if self.check_color:            positions = self._take_changes(buff)                        for i in positions['added']:                buff.apply_tag(self.txg_added, i[0],i[1])                        for i in positions['removed']:                buff.apply_tag(self.txg_removed, i[0], i[1])        else:            buff.remove_tag(self.txg_added, buff.get_start_iter (), buff.get_end_iter())            buff.remove_tag(self.txg_removed, buff.get_start_iter (), buff.get_end_iter())    def _take_changes (self, buffer):        positions = {'added':[], 'removed':[]}        in_line = 0        type = ''        iter = buffer.get_start_iter ()        last_char = '\n'        while iter.forward_char():            char = iter.get_char ()            offset = iter.get_offset()            if not in_line:                pos = []                if char == '+' and last_char == '\n':                    pos.append (buffer.get_iter_at_offset(offset))                    type = 'added'                    in_line = 1                elif char == '-' and last_char == '\n':                    pos.append (buffer.get_iter_at_offset(offset))                    type = 'removed'                    in_line = 1            else:                if char == '\n':                    pos.append (buffer.get_iter_at_offset(offset))                    positions [type].append (pos)                    in_line = 0                    type = ''            last_char = char                return positionsclass DiffTree(HIGVBox, object):    def __init__(self, colors):        HIGVBox.__init__(self)        self.colors = colors        self.set_border_width(5)        self.set_spacing(6)        self._create_widgets()        self._set_diff_view()        self._pack_widgets()    def _create_widgets(self):        self.diff_box = HIGHBox()        self.diff_title = HIGSectionLabel("Comparison")        self.diff_scrolled = gtk.ScrolledWindow()        self.diff_tree = gtk.TreeStore(str, str, str, str, str, str)        self.diff_view = gtk.TreeView(self.diff_tree)        self.diff_column1 = gtk.TreeViewColumn("")        self.diff_column2 = gtk.TreeViewColumn(_("Section"))        self.diff_column3 = gtk.TreeViewColumn(_("Property"))        self.diff_column4 = gtk.TreeViewColumn(_("Original value"))        self.diff_column5 = gtk.TreeViewColumn(_("Current value"))        self.diff_cell = gtk.CellRendererText()    def activate_color(self, activate):        if activate:            self.diff_column1.set_attributes(self.diff_cell, text=0, background=5)            self.diff_column2.set_attributes(self.diff_cell, text=1, background=5)            self.diff_column3.set_attributes(self.diff_cell, text=2, background=5)            self.diff_column4.set_attributes(self.diff_cell, text=3, background=5)            self.diff_column5.set_attributes(self.diff_cell, text=4, background=5)        else:            self.diff_column1.clear_attributes(self.diff_cell)            self.diff_column2.clear_attributes(self.diff_cell)            self.diff_column3.clear_attributes(self.diff_cell)            self.diff_column4.clear_attributes(self.diff_cell)            self.diff_column5.clear_attributes(self.diff_cell)                        self.diff_column1.set_attributes(self.diff_cell, text=0)            self.diff_column2.set_attributes(self.diff_cell, text=1)            self.diff_column3.set_attributes(self.diff_cell, text=2)            self.diff_column4.set_attributes(self.diff_cell, text=3)            self.diff_column5.set_attributes(self.diff_cell, text=4)            self.diff_cell.set_property("background", "white")    def _set_diff_view(self):        font_desc = pango.FontDescription("monospace normal 9")        self.diff_cell.set_property("font-desc", font_desc)                self.diff_scrolled.set_size_request(-1, 260)        self.diff_view.set_enable_search(True)        self.diff_view.set_search_column(2)        selection = self.diff_view.get_selection()        selection.set_mode(gtk.SELECTION_MULTIPLE)        self.diff_view.append_column(self.diff_column1)        self.diff_view.append_column(self.diff_column2)        self.diff_view.append_column(self.diff_column3)        self.diff_view.append_column(self.diff_column4)        self.diff_view.append_column(self.diff_column5)        # Diff Column 1        self.diff_column1.set_reorderable(True)        self.diff_column1.set_resizable(True)        self.diff_column1.connect("clicked", self.search_column, 0)        self.diff_column1.set_sort_column_id(0)        self.diff_column1.pack_start(self.diff_cell, True)        self.diff_column1.set_attributes(self.diff_cell, text=0)                # Diff Column 2        self.diff_column2.set_reorderable(True)        self.diff_column2.set_resizable(True)        self.diff_column2.connect("clicked", self.search_column, 1)        self.diff_column2.set_sort_column_id(1)        self.diff_column2.pack_start(self.diff_cell, True)        self.diff_column2.set_attributes(self.diff_cell, text=1)        # Diff Column 3        self.diff_column3.set_reorderable(True)        self.diff_column3.set_resizable(True)        self.diff_column3.connect("clicked", self.search_column, 2)        self.diff_column3.set_sort_column_id(2)        self.diff_column3.pack_start(self.diff_cell, True)        self.diff_column3.set_attributes(self.diff_cell, text=2)        # Diff Column 4        self.diff_column4.set_reorderable(True)        self.diff_column4.set_resizable(True)        self.diff_column4.connect("clicked", self.search_column, 3)        self.diff_column4.set_sort_column_id(3)        self.diff_column4.pack_start(self.diff_cell, True)        self.diff_column4.set_attributes(self.diff_cell, text=3)        # Diff Column 5        self.diff_column5.set_reorderable(True)        self.diff_column5.set_resizable(True)        self.diff_column5.connect("clicked", self.search_column, 4)        self.diff_column5.set_sort_column_id(4)        self.diff_column5.pack_start(self.diff_cell, True)        self.diff_column5.set_attributes(self.diff_cell, text=4)        self.diff_scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)    def clear_diff_tree(self):        for i in range(len(self.diff_tree)):            iter = self.diff_tree.get_iter_root()            del(self.diff_tree[iter])    def change_status(self, iter, status):        self.diff_tree[iter][0] = status        self.diff_tree[iter][5] = self.colors.get_hex_color(status)    def set_parent_status(self, parent, status):        if status != "" and status.upper() != "U":            while parent:                self.change_status(parent, "M")                parent = self.diff_tree.iter_parent(parent)            def make_diff(self, parsed1, parsed2):        self.clear_diff_tree()        section = _("%s Info" % APP_DISPLAY_NAME)        parent = self.append_parent(None, section, "")        self.diff_it(parent, "", _("Profile"), parsed1.profile, parsed2.profile)        self.diff_it(parent, "", _("Profile Name"), parsed1.profile_name,                     parsed2.profile_name)        self.diff_it(parent, "", _("Profile Options"), parsed1.profile_options,                     parsed2.profile_options)        self.diff_it(parent, "", _("Target"), parsed1.target, parsed2.target)        section = _("%s Info" % NMAP_DISPLAY_NAME)        parent = self.append_parent(None, section, "")                self.diff_it(parent, "", _("Debugging"), parsed1.debugging_level,                     parsed2.debugging_level)        self.diff_it(parent, "", _("Verbosity"), parsed1.verbose_level,                     parsed2.verbose_level)        self.diff_it(parent, "", _("Command"), parsed1.nmap_command,                     parsed2.nmap_command)        self.diff_it(parent, "", _("Scanner version"), parsed1.scanner_version,                     parsed2.scanner_version)        section = _("Scan Info")        parent = self.append_parent(None, section, "")                self.diff_it(parent, "", _("Open Ports"), parsed1.open_ports,                     parsed2.open_ports)        self.diff_it(parent, "", _("Filtered Ports"), parsed1.filtered_ports,                     parsed2.filtered_ports)        self.diff_it(parent, "", _("Closed Ports"), parsed1.closed_ports,                     parsed2.closed_ports)        self.diff_it(parent, "", _("Hosts Up"), parsed1.hosts_up,                     parsed2.hosts_up)        self.diff_it(parent, "", _("Hosts Down"), parsed1.hosts_down,                     parsed2.hosts_down)        self.diff_it(parent, "", _("Hosts Scanned"), parsed1.hosts_scanned,                     parsed2.hosts_scanned)        self.diff_it(parent, "", _("Finish date"), parsed1.formated_finish_date,                     parsed2.formated_finish_date)        hosts1 = parsed1.hosts[:]        hosts2 = parsed2.hosts[:]        while hosts1:            host = hosts1.pop()                        second_host = HostInfo(0)            host_state = "N"            for host2 in hosts2:                if (host.mac and host.mac == host2.mac) or \                       (host.ip and host.ip == host2.ip) or \                       (host.ipv6 and host.ipv6 == host2.ipv6):                    second_host = host2                    host_state = ""                                        del(hosts2[hosts2.index(host2)]) # Remove it from the hosts2                    break            self.add_host_diff(host_state, host, second_host)        for host in hosts2:            self.add_host_diff("A", host, host)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?