Source code for ptp.tools.metasploit.parser

"""

:synopsis: Specialized :class:`ptp.libptp.parser.AbstractParser` classes for the tool Metasploit.

.. moduleauthor:: Tao Sauvage

"""

from ptp.libptp.parser import FileParser
from ptp.tools.metasploit.signatures import SIGNATURES


[docs]class MetasploitParser(FileParser): """Metasploit specialized parser.""" __tool__ = 'metasploit' __plugin__ = ''
[docs] def __init__(self, pathname, filename='*.txt', plugin='', light=True, first=True): """Initialize MetasploitParser. :param str pathname: Path to the report directory. :param str filename: Regex matching the report file. :param str plugin: Name of the plugin that generated the report. :param bool first: Only process first file (``True``) or each file that matched (``False``). """ self.__plugin__ = plugin FileParser.__init__(self, pathname, filename, first=first)
[docs] @classmethod def is_mine(cls, pathname, filename='*.txt', plugin='', light=True, first=True): """Check if it can handle the report file. :param str pathname: Path to the report directory. :param str filename: Regex matching the report file. :param str plugin: Name of the plugin that generated the report. :param bool light: `True` to only parse the ranking of the findings from the report. :param bool first: Only process first file (``True``) or each file that matched (``False``). :return: `True` if it supports the report, `False` otherwise. :rtype: :class:`bool` """ # TODO: Properly check the supported versions. if plugin: return True return False
[docs] def parse_metadata(self): """Parse the metadata of the report. :return: The metadata of the report. :rtype: dict """ # TODO: Properly retrieve the metadata. return {}
[docs] def parse_report(self): """Parse the results of the report. :return: List of dicts where each one represents a discovery. :rtype: :class:`list` """ try: signatures = SIGNATURES.get(self.__plugin__, {}).iteritems() except AttributeError: # Python3 signatures = SIGNATURES.get(self.__plugin__, {}).items() self.vulns = [{ 'name': self.__plugin__, 'ranking': ranking} for signature, ranking in signatures if signature in self.stream] return self.vulns