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 + -
显示快捷键?