new: Helper to create MISP Objects for regcheck.org.uk

pull/382/head
Raphaël Vinot 2019-04-02 17:13:07 +02:00
parent 64bcaad0e5
commit 1e060f669f
4 changed files with 108 additions and 1 deletions

22
examples/add_vehicle_object.py Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pymisp.tools import VehicleObject
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Get information for a VehicleObject and add MISP objects to a MISP instance.')
parser.add_argument("-u", "--username", required=True, help="Account username.")
parser.add_argument("-c", "--country", required=True, help="Country.")
parser.add_argument("-r", "--registration", required=True, help="Registration ID.")
parser.add_argument("-d", "--dump", action='store_true', help="(Debug) Dump the object in the terminal.")
args = parser.parse_args()
if args.dump:
vehicle = VehicleObject(country=args.country, registration=args.registration, username=args.username)
print(vehicle.report)
print(vehicle.to_json())
else:
# not Implemented yet.
pass

@ -1 +1 @@
Subproject commit 047595ddeb496a9cba294064902dd6fb5641cde7
Subproject commit 0c6b7b4302b58b0b1ab8371acdd3e4b988609a88

View File

@ -18,3 +18,4 @@ from .geolocationobject import GeolocationObject # noqa
if sys.version_info >= (3, 6):
from .emailobject import EMailObject # noqa
from .vehicleobject import VehicleObject # noqa

View File

@ -0,0 +1,84 @@
#!/usr/bin/python3
import sys
import getopt
import requests
import json
from pymisp import MISPObject
from .abstractgenerator import AbstractMISPObjectGenerator
# Original sourcecode: https://github.com/hayk57/MISP_registration_check
class VehicleObject(AbstractMISPObjectGenerator):
'''Vehicle object generator out of regcheck.org.uk'''
country_urls = {
'fr': "http://www.regcheck.org.uk/api/reg.asmx/CheckFrance",
'es': "http://www.regcheck.org.uk/api/reg.asmx/CheckSpain",
'uk': "http://www.regcheck.org.uk/api/reg.asmx/Check"
}
def __init__(self, country: str, registration: str, username: str, standalone=True, **kwargs):
super(VehicleObject, self).__init__("vehicle", standalone=standalone, **kwargs)
self._country = country
self._registration = registration
self._username = username
self._report = self._query()
self.generate_attributes()
@property
def report(self):
return self._report
def generate_attributes(self):
carDescription = self._report["Description"]
carMake = self._report["CarMake"]["CurrentTextValue"]
carModel = self._report["CarModel"]["CurrentTextValue"]
ImageUrl = self._report["ImageUrl"]
IndicativeValue = ''
if (self._country == "fr"):
IndicativeValue = self._report["IndicativeValue"]["CurrentTextValue"]
# BodyStyle = vehicleJson["BodyStyle"]["CurrentTextValue"]
# RegistrationDate = vehicleJson["RegistrationDate"]
VIN = self._report["ExtendedData"]["numSerieMoteur"]
gearbox = self._report["ExtendedData"]["boiteDeVitesse"]
dynoHP = self._report["ExtendedData"]["puissanceDyn"]
firstRegistration = self._report["ExtendedData"]["datePremiereMiseCirculation"]
self.add_attribute('dyno-power', type='text', value=dynoHP)
self.add_attribute('gearbox', type='text', value=gearbox)
if (self._country == "es"):
IndicativeValue = self._report["IndicativePrice"]
if (self._country == "es" or self._country == "uk"):
firstRegistration = self._report["RegistrationYear"]
VIN = self._report["VehicleIdentificationNumber"]
self.add_attribute('description', type='text', value=carDescription)
self.add_attribute('make', type='text', value=carMake)
self.add_attribute('model', type='text', value=carModel)
self.add_attribute('vin', type='text', value=VIN)
self.add_attribute('license-plate-number', type='text', value=self._registration)
self.add_attribute('indicative-value', type='text', value=IndicativeValue)
self.add_attribute('date-first-registration', type='text', value=firstRegistration)
self.add_attribute('image-url', type='text', value=ImageUrl)
def _query(self):
payload = "RegistrationNumber={}&username={}".format(self._registration, self._username)
headers = {
'Content-Type': "application/x-www-form-urlencoded",
'cache-control': "no-cache",
}
response = requests.request("POST", self.country_urls.get(self._country), data=payload, headers=headers)
# FIXME: Clean that up.
for item in response.text.split("</vehicleJson>"):
if "<vehicleJson>" in item:
responseJson = item[item.find("<vehicleJson>") + len("<vehicleJson>"):]
return json.loads(responseJson)