コード例 #1
0
    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))
コード例 #2
0
        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)
コード例 #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))
コード例 #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:])
コード例 #5
0
ファイル: bus.py プロジェクト: Paulxia/PacketManipulator
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:])
コード例 #6
0
    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
コード例 #7
0
ファイル: bus.py プロジェクト: Paulxia/PacketManipulator
    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))
コード例 #8
0
ファイル: bus.py プロジェクト: Paulxia/PacketManipulator
    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)
コード例 #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)
           )
     )
コード例 #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)
コード例 #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)
コード例 #12
0
ファイル: bus.py プロジェクト: Paulxia/PacketManipulator
 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)
コード例 #13
0
ファイル: main.py プロジェクト: Paulxia/PacketManipulator
    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)
コード例 #14
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)
コード例 #15
0
ファイル: main.py プロジェクト: Paulxia/PacketManipulator
    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>"
コード例 #16
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>"
コード例 #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
コード例 #18
0
ファイル: bus.py プロジェクト: Paulxia/PacketManipulator
    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
コード例 #19
0
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()
コード例 #20
0
    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
コード例 #21
0
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
コード例 #22
0
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