Ejemplo n.º 1
0
    def run(self):
        global nodes

        logging.info("Starting FjoSpidie 2.0")
        starttime = datetime.now()
        ids_engine = None
        tempdir = tempfile.mkdtemp(dir="/mnt/fjospidie")

        if self.config.suricata:
            from engine.SuricataEngine import SuricataEngine
        else:
            from engine.SnortEngine import SnortEngine

        report = Report(starttime, self.config)
        proxy_port = random.randint(20000, 65534)
        start_url = urlparse(self.config.url)
        nodes.append(Node(start_url.hostname))
        nodes[0].set_status(200)

        if not self.config.nopcap:
            pcap_engine = PcapEngine(self.config, report, tempdir)
            pcap_engine.start()

        webrunner = WebRunner(report)
        har = webrunner.run_webdriver(start_url, proxy_port, self.config,
                                      tempdir)

        if not self.config.nopcap:
            pcap_engine.stop()
            pcap_path = pcap_engine.pcap_path

        connections = webrunner.find_external_connections(har)
        entries = har.entries
        report.insert_entries(entries)
        if self.config.parsers:
            for parser in self.config.parsers, :
                package = "fjospidie.engine.parser.{}".format(parser)
                try:
                    imported = importlib.import_module(package)
                    parser_class = getattr(imported, parser)
                    parser_engine = parser_class(self.config, report, entries)
                    parsers.append(parser_engine)
                    parser_engine.start()
                except Exception, e:
                    logging.error("Error starting parser {}: {}".format(
                        parser, e))
                    next