From ac1eb522c31ce8614ee2945958846e27a94cdb81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Sun, 1 May 2016 12:09:33 +0200 Subject: [PATCH] Add IPASN history module --- REQUIREMENTS | 1 + modules/expansion/ipasn.py | 49 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100755 modules/expansion/ipasn.py diff --git a/REQUIREMENTS b/REQUIREMENTS index 724c659..4799b39 100644 --- a/REQUIREMENTS +++ b/REQUIREMENTS @@ -7,3 +7,4 @@ PyPDNS pypssl redis pyeupi +ipasn-redis diff --git a/modules/expansion/ipasn.py b/modules/expansion/ipasn.py new file mode 100755 index 0000000..0a0dc2b --- /dev/null +++ b/modules/expansion/ipasn.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +import json +from ipasn_redis import IPASN + +misperrors = {'error': 'Error'} +mispattributes = {'input': ['ip-src', 'ip-dst'], 'output': ['freetext']} +moduleinfo = {'version': '0.1', 'author': 'Raphaƫl Vinot', + 'description': 'Query an IP ASN history service (https://github.com/CIRCL/IP-ASN-history.git)', + 'module-type': ['expansion', 'hover']} + +moduleconfig = ['host', 'port', 'db'] + + +def handler(q=False): + if q is False: + return False + request = json.loads(q) + if request.get('ip-src'): + toquery = request['ip-src'] + elif request.get('ip-dst'): + toquery = request['ip-dst'] + else: + misperrors['error'] = "Unsupported attributes type" + return misperrors + + if not request.get('config') and not (request['config'].get('host') and + request['config'].get('port') and + request['config'].get('db')): + misperrors['error'] = 'IP ASN history configuration is missing' + return misperrors + + ipasn = IPASN(host=request['config'].get('host'), + port=request['config'].get('port'), db=request['config'].get('db')) + + values = ' \n '.join(list(ipasn.aggregate_history(toquery))) + if not values: + misperrors['error'] = 'Unable to find the history of this IP' + return misperrors + return {'results': [{'types': mispattributes['output'], 'values': values}]} + + +def introspection(): + return mispattributes + + +def version(): + moduleinfo['config'] = moduleconfig + return moduleinfo