"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