def __init__(self, contents): assert isinstance(contents, basestring), "contents should be a string" self._osdb = odict() for i in contents.splitlines(): line = i.strip() if line.startswith('#') or not line: continue try: fp = line[0:FINGER_LEN] first, second = fp.split(':', 1) if first in self._osdb: self._osdb[first][second] = line[FINGER_LEN + 1:] else: dct = odict() dct[second] = line[FINGER_LEN + 1:] self._osdb[first] = dct except: pass log.info("%d fingerprints loaded" % len(self._osdb))
def add_host_entry(target, targets_idx): entry = None if is_mac(target): entry = HostEntry(l2_addr=target) elif func: if is_ip(target) and netmask.match_strict(target): profs = filter(lambda p: p.l2_addr is not None, func(l3_addr=target, netmask=netmask) or \ []) if profs: entry = HostEntry(l2_addr=profs[0].l2_addr, l3_addr=target, hostname=profs[0].hostname) else: profs = filter(lambda p: p.l2_addr is not None, func(hostname=target, netmask=netmask) or \ []) if profs: entry = HostEntry(l2_addr=profs[0].l2_addr, l3_addr=profs[0].l3_addr, hostname=target) if entry: log.info('Group %d -> %s' % (targets_idx + 1, entry)) self.targets[targets_idx].append(entry)
def register_vfunction(self, funcname): "Register a virtual function" if not funcname in self.funcs: self.funcs[funcname] = None self.emit('vfunc-registered', funcname) log.info('%s vfunction registered for %s' % (funcname, self.id))
def export_methods(self, *args, **kwargs): cls = self.__class__ cls.__init__ = cls.__original_init__ svcid, implementor = cls.__svc_id__ cls.__init__(self, *args, **kwargs) delattr(cls, '__svc_id__') delattr(cls, '__original_init__') if not implementor: log.info("Registering new service %s" % svcid) svc_inst = Service(svcid) ServiceBus().register_service(svcid, svc_inst) else: svc_inst = ServiceBus().get_service(svcid) if not svc_inst: return for _, meth in inspect.getmembers(self, inspect.ismethod): meth_name = meth.__name__ if meth_name.startswith('__impl_'): if implementor: svc_inst.bind_function(meth_name[7:], meth) else: svc_inst.register_function(meth_name[7:], meth) elif not implementor and meth_name.startswith('__intf_'): svc_inst.register_vfunction(meth_name[7:])
def export_methods(self, *args, **kwargs): cls = self.__class__ cls.__init__ = cls.__original_init__ svcid, implementor = cls.__svc_id__ cls.__init__(self, *args, **kwargs) delattr(cls, '__svc_id__') delattr(cls, '__original_init__') if not implementor: log.info("Registering new service %s" % svcid) svc_inst = Service(svcid) ServiceBus().register_service(svcid, svc_inst) else: svc_inst = ServiceBus().get_service(svcid) if not svc_inst: return for _, meth in inspect.getmembers(self, inspect.ismethod): meth_name = meth.__name__ if meth_name.startswith('__impl_'): if implementor: svc_inst.bind_function(meth_name[7:], meth) else: svc_inst.register_function(meth_name[7:], meth) elif not implementor and meth_name.startswith('__intf_'): svc_inst.register_vfunction(meth_name[7:])
def scan_path(self): """ Walk the path passed in the constructor for .ump files, then save the found plugins on a dict that could be accesed with get_plugins() No recursive scan, only top-level directory is considerated. """ if self.scanned or not os.path.exists(self.path): return for file in os.listdir(self.path): path = os.path.join(self.path, file) if file.endswith(".ump") and \ os.path.isfile(path): try: reader = PluginReader(path) for conf_name, conf_dict in reader.configurations: AuditManager().register_configuration(conf_name, conf_dict) except BadPlugin, exp: log.info("%s" % exp) continue self._plugins[file] = reader
def register_vfunction(self, funcname): "Register a virtual function" if not funcname in self.funcs: self.funcs[funcname] = None self.emit('vfunc-registered', funcname) log.info('%s vfunction registered for %s' % (funcname, self.id))
def register_function(self, funcname, cb): if not funcname in self.funcs or not self.funcs[funcname]: self.funcs[funcname] = cb self.emit('func-registered', funcname, cb) log.info('%s function registered for %s' % (funcname, self.id)) else: raise ValueError("Function `%s' already registered" % funcname)
def dump(self): log.info(">>> dump(): conflicts/provides/needs: %d / %d / %d" % \ ( len(self.who_conflicts), len(self.who_provides), len(self.who_needs) ) )
def bind_function(self, funcname, func): if funcname in self.funcs and self.funcs[funcname] is None: self.funcs[funcname] = func self.emit('func-binded', funcname, func) log.info("Function %s binded as %s" % (func, funcname)) else: raise ValueError("Service doesn't provide `%s' method" % \ funcname)
def register_function(self, funcname, cb): if not funcname in self.funcs or not self.funcs[funcname]: self.funcs[funcname] = cb self.emit('func-registered', funcname, cb) log.info('%s function registered for %s' % (funcname, self.id)) else: raise ValueError("Function `%s' already registered" % funcname)
def bind_function(self, funcname, func): if funcname in self.funcs and self.funcs[funcname] is None: self.funcs[funcname] = func self.emit('func-binded', funcname, func) log.info("Function %s binded as %s" % (func, funcname)) else: raise ValueError("Service doesn't provide `%s' method" % \ funcname)
def start(self, reader): log.info('HTTP Analyzer plugin started') PMApp().main_window.bind_session(SessionType.SNIFF_SESSION, HTTPage) if reader: contents = reader.file.read('data/protovis.js') else: contents = "alert('Protovis not loaded!');" global g_js_graph g_js_graph = g_js_graph.replace('$script$', contents)
def start(self, reader): log.info('HTTP Analyzer plugin started') PMApp().main_window.bind_session(SessionType.SNIFF_SESSION, HTTPage) if reader: contents = reader.file.read('data/protovis.js') else: contents = "alert('Protovis not loaded!');" global g_js_graph g_js_graph = g_js_graph.replace('$script$', contents)
def map_thread(self, ans): try: log.debug("Plotting async") global glocator self.html_map = tracert.create_map(ans, glocator) log.info("Plotted") except Exception, err: log.error("Error while plotting") log.error(generate_traceback()) self.html_map = "<pre>Error while plotting</pre>"
def map_thread(self, ans): try: log.debug("Plotting async") global glocator self.html_map = tracert.create_map(ans, glocator) log.info("Plotted") except Exception, err: log.error("Error while plotting") log.error(generate_traceback()) self.html_map = "<pre>Error while plotting</pre>"
def export_imethods(svc): svc_inst = Service(svcid) ServiceBus().register_service(svcid, svc_inst) log.info("Registering new service INTERFACE `%s'" % svcid) for _, meth in inspect.getmembers(svc, inspect.ismethod): meth_name = meth.__name__ if meth_name[0] == '_': continue svc_inst.register_vfunction(meth_name) log.info("Service has `%s' VFUNC" % meth_name) return svc
def export_imethods(svc): svc_inst = Service(svcid) ServiceBus().register_service(svcid, svc_inst) log.info("Registering new service INTERFACE `%s'" % svcid) for _, meth in inspect.getmembers(svc, inspect.ismethod): meth_name = meth.__name__ if meth_name[0] == '_': continue svc_inst.register_vfunction(meth_name) log.info("Service has `%s' VFUNC" % meth_name) return svc
from umit.pm import backend from umit.pm.core.i18n import _ from umit.pm.core.logger import log from umit.pm.manager.preferencemanager import Prefs from umit.pm.gui.core.app import PMApp from umit.pm.gui.core.icons import get_pixbuf from umit.pm.gui.widgets.plotter import Plotter from umit.pm.gui.tabs.operationstab import SendOperation, SendReceiveOperation from umit.pm.gui.pages.base import Perspective try: from umit.pm.gui.widgets.pygtkhexview import HexView log.info('Cool we\'re using read/write hex-view.') except ImportError: from umit.pm.gui.widgets.hexview import HexView log.warning('Erm :( We are using read only hex-view. Try to install ' 'pygtkhexview and restart PM. You could get a copy from: ' 'http://code.google.com/p/pygtkhex/') class ProtocolHierarchy(gtk.ScrolledWindow): def __init__(self, parent): gtk.ScrolledWindow.__init__(self) self.__create_widgets() self.__pack_widgets() self.__connect_signals()
def create_targets(self): """ Update targets structure appropriately by looking at target{1,2}_tree. @return True if the list is filled right or False """ func = ServiceBus().get_function('pm.hostlist', 'get_target') if not func: dialog = gtk.MessageDialog(self.get_toplevel(), gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, "No class implements `get_target method'" " of pm.hostlist interface. Please load " "an appropriate plugin.") dialog.run() dialog.hide() dialog.destroy() else: netmask = Netmask(self.session.context.get_netmask1(), self.session.context.get_ip1()) def add_host_entry(target, targets_idx): entry = None if is_mac(target): entry = HostEntry(l2_addr=target) elif func: if is_ip(target) and netmask.match_strict(target): profs = filter(lambda p: p.l2_addr is not None, func(l3_addr=target, netmask=netmask) or \ []) if profs: entry = HostEntry(l2_addr=profs[0].l2_addr, l3_addr=target, hostname=profs[0].hostname) else: profs = filter(lambda p: p.l2_addr is not None, func(hostname=target, netmask=netmask) or \ []) if profs: entry = HostEntry(l2_addr=profs[0].l2_addr, l3_addr=profs[0].l3_addr, hostname=target) if entry: log.info('Group %d -> %s' % (targets_idx + 1, entry)) self.targets[targets_idx].append(entry) # Ok. Now let's create the target list if not self.targets[0] and not self.targets[1]: log.info('Creating targets list for the MITM attack') for target in self.target1_tree.get_targets(): add_host_entry(target, 0) for target in self.target2_tree.get_targets(): add_host_entry(target, 1) errs = [] if func: netmask = None if not self.targets[0]: netmask = Netmask(self.session.context.get_netmask1(), self.session.context.get_ip1()) for prof in filter(lambda p: p.l2_addr is not None, func(netmask=netmask) or []): entry = HostEntry(l2_addr=prof.l2_addr, l3_addr=prof.l3_addr, hostname=prof.hostname) self.targets[0].append(entry) log.info('[AUTOADD] Group 1 -> %s' % entry) if not self.targets[1]: if not netmask: netmask = Netmask(self.session.context.get_netmask1(), self.session.context.get_ip1()) for prof in filter(lambda p: p.l2_addr is not None, func(netmask=netmask) or []): entry = HostEntry(l2_addr=prof.l2_addr, l3_addr=prof.l3_addr, hostname=prof.hostname) self.targets[1].append(entry) log.info('[AUTOADD] Group 2 -> %s' % entry) if not self.targets[0]: errs.append( _('Could not set any targets for the first group.')) if not self.targets[1]: errs.append( _('Could not set any targets for the second group.')) if errs and not func: errs.append( _('Neither get_target can be used to autopopulate the targ' 'ets. Please load at least an appropriate plugin (like ' 'Profiler) and make an ARP scan, or add targets MAC by ' 'hand.')) if errs: dialog = gtk.MessageDialog(self.get_toplevel(), gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, "Some errors found:\n\n" + \ '\n'.join(errs)) dialog.run() dialog.hide() dialog.destroy() return False return True
from umit.pm.core.logger import log from umit.pm.core.bus import ServiceBus from umit.pm.manager.preferencemanager import Prefs from umit.pm.manager.auditmanager import AuditManager from umit.pm.gui.widgets.statusbar import StatusBar from umit.pm.higwidgets.higdialogs import HIGAlertDialog __paned_imported = False if Prefs()['gui.docking'].value.lower() == 'moo': try: from moopaned import * __paned_imported = True except ImportError: log.info("moo library is not installed.") elif Prefs()['gui.docking'].value.lower() == 'gdl': try: from gdlpaned import * __paned_imported = True except ImportError: log.info("GDL is not installed. Using fallback paned.") if Prefs()['gui.docking'].value.lower() == 'standard' or not __paned_imported: from fallbackpaned import * __paned_imported = True log.info('Using fallback paned') from umit.pm.gui.tabs.vtetab import VteTab
from umit.pm.core.logger import log from umit.pm.core.bus import ServiceBus from umit.pm.manager.preferencemanager import Prefs from umit.pm.manager.auditmanager import AuditManager from umit.pm.gui.widgets.statusbar import StatusBar from umit.pm.higwidgets.higdialogs import HIGAlertDialog __paned_imported = False if Prefs()['gui.docking'].value.lower() == 'moo': try: from moopaned import * __paned_imported = True except ImportError: log.info("moo library is not installed.") elif Prefs()['gui.docking'].value.lower() == 'gdl': try: from gdlpaned import * __paned_imported = True except ImportError: log.info("GDL is not installed. Using fallback paned.") if Prefs()['gui.docking'].value.lower() == 'standard' or not __paned_imported: from fallbackpaned import * __paned_imported = True log.info('Using fallback paned') from umit.pm.gui.tabs.vtetab import VteTab