mirror of https://github.com/MISP/PyMISP
Script for the upcoming feed generator
- also some minor modifications to the get_index apipull/3/head
parent
3a2414bc8c
commit
be242152e7
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import json
|
||||
import os
|
||||
from pymisp import PyMISP
|
||||
from settings import url, key, ssl, outputdir, filters
|
||||
|
||||
|
||||
def init():
|
||||
return PyMISP(url, key, ssl, 'json')
|
||||
|
||||
|
||||
def saveEvent(misp, uuid):
|
||||
try:
|
||||
event = misp.get_event(uuid)
|
||||
eventFile = open(os.path.join(outputdir, uuid + '.json'), 'w')
|
||||
eventFile.write(event.text)
|
||||
eventFile.close()
|
||||
except:
|
||||
sys.exit('Could not create the manifest file.')
|
||||
|
||||
|
||||
def saveManifest(manifest):
|
||||
try:
|
||||
manifestFile = open(os.path.join(outputdir, 'manifest.json'), 'w')
|
||||
manifestFile.write(json.dumps(manifest))
|
||||
manifestFile.close()
|
||||
except:
|
||||
sys.exit('Could not create the manifest file.')
|
||||
|
||||
if __name__ == '__main__':
|
||||
misp = init()
|
||||
result = misp.get_index(None, filters)
|
||||
try:
|
||||
events = result.json()
|
||||
except:
|
||||
sys.exit("Invalid response received from MISP.")
|
||||
if len(events) == 0:
|
||||
sys.exit("No events returned.")
|
||||
manifest = {}
|
||||
for event in events:
|
||||
manifest[event['uuid']] = event['timestamp']
|
||||
saveEvent(misp, event['uuid'])
|
||||
saveManifest(manifest)
|
||||
print str(len(manifest)) + ' events exported.'
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
# Your MISP's URL
|
||||
url = ''
|
||||
|
||||
# The auth key to the MISP user that you wish to use. Make sure that the
|
||||
# user has auth_key access
|
||||
key = ''
|
||||
|
||||
# Should the certificate be validated?
|
||||
ssl = False
|
||||
|
||||
# The output dir for the feed. This will drop a lot of files, so make
|
||||
# sure that you use a directory dedicated to the feed
|
||||
outputdir = 'output'
|
||||
|
||||
# The filters to be used for by the feed. You can use any filter that
|
||||
# you can use on the event index, such as organisation, tags, etc.
|
||||
# It uses the same joining and condition rules as the API parameters
|
||||
# For example:
|
||||
# filters = {'tag':'tlp:white|feed-export|!privint','org':'CIRCL'}
|
||||
# the above would generate a feed for all events created by CIRCL, tagged
|
||||
# tlp:white and/or feed-export but exclude anything tagged privint
|
||||
filters = {}
|
||||
|
|
@ -192,15 +192,20 @@ class PyMISP(object):
|
|||
# ############### Simple REST API ################
|
||||
# ################################################
|
||||
|
||||
def get_index(self, force_out=None):
|
||||
def get_index(self, force_out=None, filters=None):
|
||||
"""
|
||||
Return the index.
|
||||
|
||||
Warning, there's a limit on the number of results
|
||||
"""
|
||||
session = self.__prepare_session(force_out)
|
||||
url = urljoin(self.root_url, 'events')
|
||||
return session.get(url)
|
||||
url = urljoin(self.root_url, 'events', 'index')
|
||||
if filters is not None:
|
||||
filters = json.dumps(filters)
|
||||
print filters
|
||||
return session.post(url, data=filters)
|
||||
else:
|
||||
return session.get(url)
|
||||
|
||||
def get_event(self, event_id, force_out=None):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue