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,返回第一个可以从那里解析的包 (或无,如果缓冲区不够大)并保留(未分析) 缓冲区数据。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Rest DSL路由无法启动路由,因为同一端点不允许有多个使用者   jvm有没有像JConsole或VisualVM这样的工具可以告诉我“类、对象、引用变量在java中存储在哪里?”   java为什么我的列表中的所有元素看起来都一样?   java运行时。运行shell脚本的exec无法打开文件   JPopupMenu的JMenuItem的java热键   会话在Java中被覆盖   如何在java中去除字符串中的尖锐重音?   java Mockito监视一个接口,模拟它的默认方法,获取NullPointerException   javascript如何在jquery中禁用同一时间选择   将数组列表附加到现有CSV文件,但它会附加并清除存储在Java文件中的以前的数据   java从我的jar中访问pdf文件   java Sonar issue参数必须为非Null,但标记为可为Null   java Salesforce流式API:在网络故障之后和重新订阅之前获取事件   在Java 1.8.0_65上运行Play2.0应用程序时出现playframework错误   java为什么字母的ASCII由方法自动转换。toCharArray()?   java如何知道JDialog是否关闭?   java向服务器发送POST请求,服务器的响应为null,启动   java如何设置JTable中特定单元格的值?   ImagePlus中的java保存问题