"Fossies" - the Fresh Open Source Software Archive

Member "radialnet/gui/HostsViewer.py" (17 Feb 2008, 5441 Bytes) of package /linux/privat/old/radialnet-0.44.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Python source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. For more information about "HostsViewer.py" see the Fossies "Dox" file reference documentation.

    1 # vim: set fileencoding=utf-8 :
    2 
    3 # Copyright (C) 2008 Insecure.Com LLC.
    4 #
    5 # Author: João Paulo de Souza Medeiros <ignotus21@gmail.com>
    6 #
    7 # This program is free software; you can redistribute it and/or modify
    8 # it under the terms of the GNU General Public License as published by
    9 # the Free Software Foundation; either version 2 of the License, or
   10 # (at your option) any later version.
   11 #
   12 # This program is distributed in the hope that it will be useful,
   13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
   14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15 # GNU General Public License for more details.
   16 #
   17 # You should have received a copy of the GNU General Public License
   18 # along with this program; if not, write to the Free Software
   19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   20 
   21 import re
   22 import gtk
   23 import gobject
   24 
   25 import bestwidgets as bw
   26 
   27 from gui.NodeNotebook import NodeNotebook
   28 from util.misc import ipv4_compare
   29 
   30 
   31 HOSTS_COLORS = ['#d5ffd5', '#ffffd5', '#ffd5d5']
   32 
   33 HOSTS_HEADER = ['ID', '#', 'Hosts']
   34 
   35 DIMENSION = (700, 400)
   36 
   37 IP_RE = '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'
   38 
   39 
   40 
   41 class HostsViewer(bw.BWMainWindow):
   42     """
   43     """
   44     def __init__(self, nodes):
   45         """
   46         """
   47         bw.BWMainWindow.__init__(self)
   48         self.set_title('Hosts Viewer')
   49         self.set_default_size(DIMENSION[0], DIMENSION[1])
   50 
   51         self.__nodes = nodes
   52         self.__view = None
   53 
   54         self.__create_widgets()
   55 
   56 
   57     def __create_widgets(self):
   58         """
   59         """
   60         self.__panel = gtk.HPaned()
   61         self.__panel.set_border_width(6)
   62 
   63         self.__list = HostsList(self, self.__nodes)
   64 
   65         self.__panel.add1(self.__list)
   66         self.__panel.add2(self.__view)
   67         self.__panel.set_position(int(DIMENSION[0] / 5))
   68 
   69         self.add(self.__panel)
   70 
   71 
   72 
   73     def change_notebook(self, node):
   74         """
   75         """
   76         if self.__view != None:
   77             self.__view.destroy()
   78 
   79         self.__view = NodeNotebook(node)
   80         self.__view.show_all()
   81 
   82         self.__panel.add2(self.__view)
   83 
   84 
   85 
   86 class HostsList(gtk.ScrolledWindow):
   87     """
   88     """
   89     def __init__(self, parent, nodes):
   90         """
   91         """
   92         super(HostsList, self).__init__()
   93         self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
   94         self.set_shadow_type(gtk.SHADOW_NONE)
   95 
   96         self.__parent = parent
   97         self.__nodes = nodes
   98 
   99         self.__create_widgets()
  100 
  101 
  102     def __create_widgets(self):
  103         """
  104         """
  105         self.__cell = gtk.CellRendererText()
  106 
  107         self.__hosts_store = gtk.ListStore(gobject.TYPE_INT,
  108                                            gobject.TYPE_INT,
  109                                            gobject.TYPE_STRING,
  110                                            gobject.TYPE_STRING,
  111                                            gobject.TYPE_BOOLEAN)
  112 
  113         self.__hosts_treeview = gtk.TreeView(self.__hosts_store)
  114         self.__hosts_treeview.connect('cursor-changed', self.__cursor_callback)
  115 
  116         for i in range(len(self.__nodes)):
  117 
  118             node = self.__nodes[i]
  119 
  120             ports = node.get_info('number_of_scanned_ports')
  121             color = HOSTS_COLORS[node.get_info('vulnerability_score')]
  122 
  123             host = node.get_info('ip')
  124 
  125             if node.get_info('hostname') != None:
  126                 host = node.get_info('hostname')
  127 
  128             self.__hosts_store.append([i,
  129                                        ports,
  130                                        host,
  131                                        color,
  132                                        True])
  133 
  134         self.__hosts_column = list()
  135 
  136         for i in range(0, len(HOSTS_HEADER)):
  137 
  138             column = gtk.TreeViewColumn(HOSTS_HEADER[i],
  139                                         self.__cell,
  140                                         text = i)
  141 
  142             self.__hosts_column.append(column)
  143 
  144             self.__hosts_column[i].set_reorderable(True)
  145             self.__hosts_column[i].set_resizable(True)
  146             self.__hosts_column[i].set_attributes(self.__cell,
  147                                                   text = i,
  148                                                   background = 3,
  149                                                   editable = 4)
  150 
  151         self.__hosts_treeview.append_column(self.__hosts_column[2])
  152 
  153         self.__hosts_store.set_sort_func(2, self.__host_sort)
  154 
  155         self.__hosts_column[2].set_sort_column_id(2)
  156 
  157         self.add_with_viewport(self.__hosts_treeview)
  158 
  159         self.__hosts_treeview.set_cursor((0,))
  160         self.__cursor_callback(self.__hosts_treeview)
  161 
  162 
  163     def __cursor_callback(self, widget):
  164         """
  165         """
  166         path = widget.get_cursor()[0]
  167         iter = self.__hosts_store.get_iter(path)
  168 
  169         node = self.__nodes[self.__hosts_store.get_value(iter, 0)]
  170 
  171         self.__parent.change_notebook(node)
  172 
  173 
  174     def __host_sort(self, treemodel, iter1, iter2):
  175         """
  176         """
  177         value1 = treemodel.get_value(iter1, 2)
  178         value2 = treemodel.get_value(iter2, 2)
  179 
  180         value1_is_ip = re.search(IP_RE, value1)
  181         value2_is_ip = re.search(IP_RE, value2)
  182 
  183         if value1_is_ip and value2_is_ip:
  184             return ipv4_compare(value1, value2)
  185 
  186         if value1_is_ip:
  187             return -1
  188 
  189         if value2_is_ip:
  190             return 1
  191 
  192         if value1 < value2:
  193             return -1
  194 
  195         if value1 > value2:
  196             return 1
  197 
  198         return 0