Unified2 ids二进制日志格式分析器
unified2的Python项目详细描述
unified2:ids的纯python解析器(想想Snort)unified2二进制日志格式
模块允许将二进制“unified2”格式的ids日志处理为 python对象。
它不解析规则ID,也不用于替换 barnyard2或自己打鼾 那个角色。
事实上,我发现snort生成的文本日志足够我 目的,因此此模块没有真正维护或更新(位于 如果你真的觉得有用,我鼓励你用叉子 模块,并联系我将pypi包的所有权转移给您。
主要目的是从日志中提取与 一些特定的触发(并通过其他 意思是,例如alert_syslog或alert_csv snort modules)规则,所以 对事件元数据的处理不够重视。
模块没有c组件,也不使用cTypes,因此应该 可移植到非cpython语言实现。
格式
格式定义是从snort头派生的 (src/sfutil/unified2_common.h)通过 pyclibrary 并缓存在unified2/\u format.py文件中。
可以生成新的定义(例如,如果添加了新的数据类型) 在snort的unified2_common.h:
bzr branch lp:pyclibrary cd pyclibrary python .../unified2/_format.py .../snort-2.X.Y.Z/src/sfutil/Unified2_common.h
安装
它是Python2.7(而不是3.x)的常规包。
使用pip是最好的方法:
% pip install unified2
如果没有,请使用:
% easy_install pip % pip install unified2
或者(see also):
% curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python % pip install unified2
或者,如果您必须这样做:
% easy_install unified2
但是,你真的不应该这么做
当前的git版本可以如下安装:
% pip install 'git+https://github.com/mk-fg/unified2.git#egg=unified2'
用法
简单示例:
import unified2.parser for ev, ev_tail in unified2.parser.parse('/var/log/snort/snort.u2.1337060186'): print 'Event:', ev if ev_tail: print 'Event tail:', ev_tail
这里的event对象是元数据的dict和一个“tail”,它可以是 是一个blob或类似的递归解析元组元数据dict和 “尾部”(例如,用于统一的附加数据)。
unified2.parser.parser接口最好用 unified2.parser.read函数:
parser, buff_agg = Parser(), '' while True: buff = parser.read(src) if not buff: break # EOF buff_agg += buff while True: buff_agg, ev = parser.process(buff_agg) if ev is None: break yield ev
这里的想法是parser.read方法应该用流调用 (例如,一个文件对象),返回解析器需要获得的字节数 下一个可解析的数据块(一个包,在u2日志的情况下)或 不管现在能读到什么,空字符串通常是 指示EOF或无阻塞读取返回。
然后应该使用累加(由parser.read)调用parser.process calls)buffer,返回第一个可以从那里解析的包 (或无,如果缓冲区不够大)并保留(未分析) 缓冲区数据。