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 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_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 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 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