diff --git a/flowmon-ads/warden3_flowmon_ads_filer.py b/flowmon-ads/warden3_flowmon_ads_filer.py old mode 100755 new mode 100644 index c7d6e279946dc27f0891e3478d81937ff28ecfe5..c00f329917999761d75e79c92e4b0a6d3f3c546c --- a/flowmon-ads/warden3_flowmon_ads_filer.py +++ b/flowmon-ads/warden3_flowmon_ads_filer.py @@ -1,32 +1,45 @@ -#!/usr/bin/python +#!/usr/bin/python26 # -*- coding: utf-8 -*- # # Copyright (C) 2011-2015 Cesnet z.s.p.o # Use of this source is governed by a 3-clause BSD-style license, see LICENSE file. +import os +import sys +sys.path.append('/data/warden/libs') + from warden_client import read_cfg, format_time from warden_filer import SafeDir import json import csv -import sys from time import strptime, mktime from uuid import uuid4 # Conversion/validation routines def isotime(t): - return strptime(t, "%Y-%m-%d %H:%M:%S") if t else None + if not t: + return None + return strptime(t, "%Y-%m-%d %H:%M:%S") def intlist(il): - return [int(i.strip()) for i in il.split(",")] if il else [] + if not il: + return [] + return [int(i.strip()) for i in il.split(",")] def strlist(sl): - return [str(s) for s in sl.split(",")] if sl else [] + if not sl: + return [] + return [str(s) for s in sl.split(",")] def ip(s): - return s.strip() if s else None + if not s: + return None + return s.strip() def iplist(sl): - return [ip(s) for s in sl.split(",")] if sl else [] + if not sl: + return [] + return [ip(s) for s in sl.split(",")] ads_fieldnames = { @@ -68,7 +81,9 @@ ads_fieldnames = { def xlat_ads_field(key, val): type_ = ads_fieldnames[key]["type"] - sval = val.strip() if val is not None else "" + sval = "" + if val is not None: + sval = val.strip() return type_(sval) @@ -111,6 +126,8 @@ ads_types = { def xlat_ads_type(s): + if s not in ads_types.keys(): + return [] return ads_types[s] @@ -152,7 +169,9 @@ def gen_idea_from_ads(ads, anonymised_target): source = {} if ads["Source"]: srcip = ads["Source"] - key = "IP4" if not ':' in srcip else "IP6" + key = "IP6" + if not ':' in srcip: + key = "IP4" source[key] = [srcip] if ads["CapturedSource"]: @@ -166,9 +185,16 @@ def gen_idea_from_ads(ads, anonymised_target): if ads["Protocol"]: target["Proto"] = [xlat_ads_proto(p) for p in ads["Protocol"]] - tgtips = [anonymised_target] if anonymised_target else ads["Targets"] + if anonymised_target: + tgtips = [anonymised_target] + else: + tgtips = ads["Targets"] + for tgtip in tgtips: - key = "IP4" if not ':' in tgtip else "IP6" + if not ':' in tgtip: + key = "IP4" + else: + key = "IP6" target.setdefault(key, []).append(tgtip) # Insert subnodes into event @@ -191,9 +217,14 @@ def main(): row[k] = xlat_ads_field(k, row[k]) event = gen_idea_from_ads(row, anonymised_target) nf = sdir.newfile() - with nf.f as f: + try: + f = nf.f data = json.dumps(event) f.write(data) + except IOError, e: + f.close() + else: + f.close() nf.moveto(sdir.incoming)