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)
Exemple #3
0
    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))
Exemple #4
0
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:])
Exemple #5
0
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
Exemple #7
0
    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))
Exemple #8
0
    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)
Exemple #9
0
 def dump(self):
     log.info(">>> dump(): conflicts/provides/needs: %d / %d / %d" % \
           (
               len(self.who_conflicts),
               len(self.who_provides),
               len(self.who_needs)
           )
     )
Exemple #10
0
 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)
Exemple #11
0
    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)
Exemple #12
0
 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)
Exemple #13
0
    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)
Exemple #15
0
    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>"
Exemple #17
0
    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
Exemple #18
0
    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