scannotebook.py
来自「Ubuntu packages of security software。 相」· Python 代码 · 共 1,296 行 · 第 1/4 页
PY
1,296 行
children = parent.get_children() for child in children: parent.remove(child) def switch_host_details(self, page): if type(page) == type([]): if len(page) > 1: for p in page: p.hide() p.set_expanded(False) self.scan_result.scan_result_notebook.host_details_vbox._pack_noexpand_nofill(p) self.scan_result.scan_result_notebook.host_details_vbox.show_all() return elif len(page) == 1: page = page[0] try: page.hide() except: pass else: self.scan_result.scan_result_notebook.host_details_vbox._pack_noexpand_nofill(page) page.set_expanded(True) page.show_all() def switch_scan_details(self, page): # Removing current widget from the host details page self.scan_result.scan_result_notebook.scan_details_vbox._pack_noexpand_nofill(page) page.show_all() def set_multiple_host_details(self, host_list): hosts = [] for h in host_list: hosts.append(h['page']) return hosts def _save_comment(self, widget, extra, host_id): if self.status.unsaved_unchanged: self.status.set_unsaved_changed() elif self.status.loaded_unchanged or self.status.saved: self.status.set_loaded_changed() # Catch a comment and record it to be saved posteriorly log.debug(">>> Catching edited comment to be saved posteriorly.") buff = widget.get_buffer() self.parsed.set_host_comment(host_id, buff.get_text(buff.get_start_iter(), buff.get_end_iter())) def set_host_details(self, host): # Start connecting event to automatically update comments, target and profile infos host_page = ScanHostDetailsPage(host.get_hostname()) host_details = host_page.host_details log.debug(">>> Setting host details") log.debug(">>> Hostname: %s" % host.get_hostname()) log.debug(">>> Comment: %s" % self.parsed.get_host_comment(host.id)) host_details.set_comment(self.parsed.get_host_comment(host.id)) # Setting events to automatically record the commentary to be saved host_page.host_details.comment_txt_vw.connect("insert-at-cursor", self._save_comment, host.id) host_page.host_details.comment_txt_vw.connect("focus-out-event", self._save_comment, host.id) self.comments[host.get_hostname()] = host.get_comment() uptime = host.get_uptime() host_details.set_host_status({'state':host.get_state(), 'open':str(host.get_open_ports()), 'filtered':str(host.get_filtered_ports()), 'closed':str(host.get_closed_ports()), 'scanned':str(host.get_scanned_ports()), 'uptime':uptime['seconds'], 'lastboot':uptime['lastboot']}) ipv4 = '' try:ipv4 = host.get_ip()['addr'] except KeyError: pass ipv6 = '' try:ipv6 = host.get_ipv6()['addr'] except KeyError: pass mac = '' try:mac = host.get_mac()['addr'] except KeyError: pass host_details.set_addresses({'ipv4':ipv4,'ipv6':ipv6,'mac':mac}) host_details.set_hostnames(host.get_hostnames()) os = host.get_osmatch() if os: os['portsused'] = host.get_ports_used() os['osclass'] = host.get_osclasses() host_details.set_os(os) host_details.set_tcpseq(host.get_tcpsequence()) host_details.set_ipseq(host.get_ipidsequence()) host_details.set_tcptsseq(host.get_tcptssequence()) return host_page def set_single_host_port(self, host): host_page = self.scan_result.scan_result_notebook.open_ports.host host_page.switch_port_to_list_store() p = host.get_ports() ports = [] for port in p: ports += port['port'] host_page.clear_port_list() for p in ports: host_page.add_port([self.findout_service_icon(p), int(p.get('portid', '0')), p.get('protocol', ''), p.get('port_state', ''), p.get('service_name', ''), p.get('service_product', '')]) def set_single_service_host(self, service): host_page = self.scan_result.scan_result_notebook.open_ports.host host_page.switch_host_to_list_store() host_page.clear_host_list() for h in service: host_page.add_host([self.findout_service_icon(h), h.get('hostname', ''), int(h.get('portid', '0')), h.get('protocol', ''), h.get('port_state', ''), h.get('service_product', ''), h.get('service_version', '')]) def set_multiple_host_port(self, host_list): host_page = self.scan_result.scan_result_notebook.open_ports.host host_page.switch_port_to_tree_store() host_page.clear_port_tree() for host in host_list: parent = host_page.port_tree.append(None, [host['host'].\ get_hostname(),0,'','','','', '']) for port in host['host'].get_ports(): for p in port.get('port', []): host_page.port_tree.append(parent, \ ['', self.findout_service_icon(p), int(p.get('portid', "0")), p.get('protocol', ''), p.get('port_state', ""), p.get('service_name', _("Unknown")), p.get('service_product', "")]) def set_multiple_service_host(self, service_list): host_page = self.scan_result.scan_result_notebook.open_ports.host host_page.switch_host_to_tree_store() host_page.clear_host_tree() for host in service_list: parent = host_page.host_tree.append(None, [host['service_name'], '','',0,'','', '', '']) for h in host['hosts']: host_page.host_tree.append(parent, \ ['', self.findout_service_icon(h), h["hostname"], int(h.get('portid', "0")), h.get('protocol', ""), h.get('port_state', _("Unknown")), h.get('service_product', ''), h.get('service_version', _("Unknown"))]) def findout_service_icon(self, port_info): return gtk.STOCK_YESclass ScanResult(gtk.HPaned): def __init__(self): gtk.HPaned.__init__(self) self.scan_host_view = ScanHostsView() self.scan_result_notebook = ScanResultNotebook() self.pack1(self.scan_host_view, True, False) self.pack2(self.scan_result_notebook, True, False) def set_nmap_output(self, msg): self.scan_result_notebook.nmap_output.nmap_output.text_view.get_buffer().set_text(msg) def clear_nmap_output(self): self.scan_result_notebook.nmap_output.nmap_output.text_view.get_buffer().set_text("") def clear_host_view(self): self.set_hosts({}) def clear_service_view(self): self.set_services({}) def get_host_selection(self): return self.scan_host_view.host_view.get_selection() def get_service_selection(self): return self.scan_host_view.service_view.get_selection() def get_nmap_output(self): return self.scan_result_notebook.nmap_output.get_nmap_output() def show_nmap_output(self, file): """Ask NmapOutputViewer to show/refresh nmap output from given file """ self.scan_result_notebook.nmap_output.nmap_output.show_nmap_output(file) def set_hosts(self, hosts_dic): """Set hosts at host list """ self.scan_host_view.set_hosts(hosts_dic) def set_services(self, services_dic): self.scan_host_view.set_services(services_dic) def clear_port_list(self): """Clear the scan result ports list """ self.scan_result_notebook.open_ports.host.clear_port_list() def change_to_nmap_output_tab(self): """Show the nmap output tab """ self.scan_result_notebook.set_current_page(1) def refresh_nmap_output(self): """Refresh Nmap output in nmap output tab """ self.scan_result_notebook.nmap_output.nmap_output.refresh_output() class ScanResultNotebook(HIGNotebook): def __init__(self): HIGNotebook.__init__(self) self.set_scrollable(True) self.set_border_width(5) self.__create_widgets() self.__nmap_output_refreshing() self.append_page(self.open_ports_page, gtk.Label(_('Ports / Hosts'))) self.append_page(self.nmap_output_page, gtk.Label(_('Nmap Output'))) self.append_page(self.host_details_page, gtk.Label(_('Host Details'))) self.append_page(self.scan_details_page, gtk.Label(_('Scan Details'))) def get_nmap_output(self): return self.nmap_output.get_map_output() def host_mode(self): self.open_ports.host.host_mode() def port_mode(self): self.open_ports.host.port_mode() def __create_widgets(self): self.open_ports_page = HIGVBox() self.nmap_output_page = HIGVBox() self.host_details_page = HIGScrolledWindow() self.scan_details_page = HIGScrolledWindow() self.scan_details_vbox = HIGVBox() self.host_details_vbox = HIGVBox() self.open_ports = ScanOpenPortsPage() self.nmap_output = ScanNmapOutputPage() self.no_selected = gtk.Label(_('No host selected!')) self.host_details = self.no_selected self.no_details = gtk.Label(_('Scan is not finished yet!')) self.scan_details = self.no_details self.open_ports_page.add(self.open_ports) self.nmap_output_page.add(self.nmap_output) self.host_details_page.add_with_viewport(self.host_details_vbox) self.host_details_vbox._pack_expand_fill(self.host_details) self.scan_details_page.add_with_viewport(self.scan_details_vbox) self.scan_details_vbox._pack_expand_fill(self.scan_details) def __nmap_output_refreshing(self): self.connect('switch-page', self.refresh_cb) def refresh_cb(self, widget, page=None, page_num=None): if self.nmap_output.nmap_output.thread.isAlive(): if page_num == 2: self.nmap_output.nmap_output.refresh_output(None)if __name__ == "__main__": status = PageStatus("empty") status.set_saved() status.set_unsaved_unchanged() status.set_unsaved_changed() status.set_loaded_unchanged() status.set_loaded_changed() status.set_empty() status.set_scanning() status.set_parsing_result() status.set_unknown() print "Saved:", status.saved print "Unsaved unchanged:", status.unsaved_unchanged print "Unsaved changed:", status.unsaved_changed print "Loaded unchanged:", status.loaded_unchanged print "Loaded changed:", status.loaded_changed print "Empty:", status.empty print "Scanning:", status.scanning print "Parsing result:", status.parsing_result print "Unknown:", status.unknown
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?