2015-08-05 17:20:59 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
2019-07-17 16:46:47 +02:00
from pymisp import ExpandedPyMISP
2019-09-12 04:42:22 +02:00
from keys import misp_url , misp_key , misp_verifycert , misp_client_cert
2015-08-05 17:20:59 +02:00
import argparse
import os
# Usage for pipe masters: ./last.py -l 5h | jq .
2019-06-24 15:55:01 +02:00
# Usage in case of large data set and pivoting page by page: python3 last.py -l 48h -m 10 -p 2 | jq .[].Event.info
2015-08-05 17:20:59 +02:00
if __name__ == ' __main__ ' :
parser = argparse . ArgumentParser ( description = ' Download latest events from a MISP instance. ' )
parser . add_argument ( " -l " , " --last " , required = True , help = " can be defined in days, hours, minutes (for example 5d or 12h or 30m). " )
2019-06-24 15:55:01 +02:00
parser . add_argument ( " -m " , " --limit " , required = False , default = " 10 " , help = " Add the limit of records to get (by default, the limit is set to 10) " )
parser . add_argument ( " -p " , " --page " , required = False , default = " 1 " , help = " Add the page to request to paginate over large dataset (by default page is set to 1) " )
2015-08-05 17:20:59 +02:00
parser . add_argument ( " -o " , " --output " , help = " Output file " )
args = parser . parse_args ( )
if args . output is not None and os . path . exists ( args . output ) :
2019-06-24 15:55:01 +02:00
print ( ' Output file already exists, aborted. ' )
2015-08-05 17:20:59 +02:00
exit ( 0 )
2019-09-12 04:42:22 +02:00
if misp_client_cert == ' ' :
misp_client_cert = None
else :
misp_client_cert = ( misp_client_cert )
misp = ExpandedPyMISP ( misp_url , misp_key , misp_verifycert , cert = misp_client_cert )
2019-07-17 16:46:47 +02:00
result = misp . search ( publish_timestamp = args . last , limit = args . limit , page = args . page , pythonify = True )
2015-08-05 17:20:59 +02:00
2019-07-17 16:46:47 +02:00
if not result :
print ( ' No results for that time period ' )
exit ( 0 )
if args . output :
with open ( args . output , ' w ' ) as f :
for r in result :
f . write ( r . to_json ( ) + ' \n ' )
else :
for r in result :
print ( r . to_json ( ) )