使用iodef xml格式(rfc 5070)创建、分析和编辑网络事件报告的python库
iodeflib的Python项目详细描述
iodeflib是一个创建、解析和编辑网络事件的python库 使用iodef xml格式(RFC 5070)的报表。
项目网站:http://www.decalage.info/python/iodeflib
一方面,IODEF是一个非常丰富、灵活、可扩展的XML 描述网络事件的格式。另一方面,它可以 在实践中使用起来很复杂,因为很难解析iodef 内容由于其丰富的功能和深度嵌套的结构。
iodeflib试图提供一个简单的api来简化开发 对iodef敏感的脚本和应用程序。
iodeflib与 iodefpython包发布于 Pypi和SourceForge。实际上我创建iodeflib是因为 因IODEF软件包的复杂性而感到失望。生成iodef 使用 GenerateDS,其中 事实上暴露了IODEF模式的复杂性。
相反,iodeflib是经过精心设计的,以便保留python 接口尽可能简单,隐藏一些不必要的嵌套 iodef模式的结构,并添加更方便的快捷方式。 iodeflib也被设计成可扩展的。
用法
iodeflib包中提供了以下示例脚本 “示例”子文件夹。
如何解析iodef数据
import iodeflib # open XML file and parse IODEF: iodef = iodeflib.parse_file('iodef.xml') # print some attributes for each incident: for incident in iodef.incidents: print 'Incident %s from %s - impact type: %s' % (incident.id, incident.id_name, incident.get_first_impact().type) for desc in incident.descriptions: print desc print 'Sources:' for system in incident.get_sources(): print system.get_addresses() print 'Targets:' for system in incident.get_targets(): print system.get_addresses() print ''
如何创建iodef数据
import iodeflib # create a new IODEF document: iodef = iodeflib.IODEF_Document() # create a new incident: incident1 = iodeflib.Incident(id='1234', id_name='CSIRT-X', report_time='2011-09-13T11:01:00+00:00', start_time='2011-09-13T10:19:24+00:00') # add description: incident1.descriptions = ['Detected denial of service attack'] # add sources and targets: incident1.add_system(category='source', address='192.168.1.2') incident1.add_system(category='target', address='192.168.3.7', name='XYZ') # add impact assessment: incident1.add_impact(description='DoS on system XYZ', type='dos', severity='medium', completion='succeeded', occurence='actual', restriction='need-to-know') iodef.incidents.append(incident1) # serialize IODEF to XML, print it and save it to a file: print iodef open('iodef2.xml', 'w').write(str(iodef))
如何编辑iodef数据
# open XML file and parse IODEF: iodef = iodeflib.parse_file('iodef2.xml') # get incident, add end time and history item: incident1 = iodef.incidents[0] histitem = iodeflib.HistoryItem(descriptions=['Blocked source IP.'], datetime='2011-09-13T13:47:12+00:00') incident1.history.append(histitem) incident1.end_time='2011-09-13T13:47:12+00:00' incident1.report_time='2011-09-13T13:52:00+00:00' # save IODEF back to an XML file: print iodef open('iodef2_updated.xml', 'w').write(str(iodef))
关于api的更多信息
请参阅iodeflib文件夹中的iodeflib.html,或检查 源代码。
状态
并不是rfc 5070的所有特性都在iodeflib中实现。 但是,最有用的类已经可用。
如何贡献
向作者发送电子邮件,或使用fork/pull请求 对bitbucket的特性提出了改进代码的建议。
有关潜在的 改进。
如何报告错误
您可以在上创建发行票据 https://bitbucket.org/decalage/iodeflib/issues,或向 作者。
请提供足够的信息来重现错误:哪个版本 您使用的是哪种操作系统和python版本等 提供示例代码和数据文件以重现错误。
许可证
版权所有(c)2011-2012,Philippe Lagadec(http://www.decalage.info)。 保留所有权利。
以源和二进制形式重新分配和使用,有无 允许修改,但条件如下 会议:
- 源代码的重新分发必须保留上述版权 注意,此条件列表和以下免责声明。
- 以二进制形式重新分配必须复制上述版权 注意,此条件列表和以下免责声明 分发时提供的文件和/或其他材料。
本软件由版权所有者和贡献者“作为 以及任何明示或默示保证,包括但不限于 对……的适销性和适用性的默示保证 特殊目的被驳回。在任何情况下,版权 持有人或出资人对任何直接、间接、附带的, 特殊、惩戒性或后果性损害(包括但不限于 采购替代货物或服务;失去使用、数据或 利润;或营业中断)无论是何种原因引起的 责任,无论是合同责任、严格责任还是侵权责任(包括 疏忽或其他)以任何方式产生 软件,即使被告知有这种损坏的可能性。