尝试使用python将windows事件日志evtx文件转换为json,然后转换为pandas框架

yyhrrdl8  于 2023-10-14  发布在  Python
关注(0)|答案(1)|浏览(178)

最终目标是将一个windows evtx文件转换为json,然后转换为pandas df。我试过几个工具,要么放弃领域或给出随机错误。
现在试一下感觉很接近了。使用evtx模块尝试并追加每个记录到一个列表,因为它的打印出来.

# from evtx import PyEvtxParser
list = []
def main():
    parser = PyEvtxParser(evtx_file)
    for record in parser.records_json():
        list.append(record['data'])
main()

这就得到了我认为是JSON数组的东西。

['{\n'
 '  "Event": {\n'
 '    "#attributes": {\n'
 '      "xmlns": "http://schemas.microsoft.com/win/2004/08/events/event"\n'
 '    },\n'
 '    "EventData": {\n'
 '      "Current Engine Version": "1.1.23050.3",\n'
 '      "Current security intelligence Version": "1.391.123.0",\n'
 '      "Domain": "",\n'
 '      "Dynamic security intelligence Compilation Timestamp": "6/1/2023 '
 '3:23:42 PM",\n'

但这么做

df = pd.DataFrame(list)

给我一列,每条记录作为一个长行
然后我试着这么做

array = json.dumps(list)

而这

df = pd.read_json(array, lines=True)

给我一个未来的警告未来的警告:将文本json传递给'read_json'
并将所有内容放在一行多列中。
哈,所以我有一个所有的事件在一列,一行和一个所有的事件在一行和多列。
我相信这是简单的东西,但我已经看了两天了,我很感激任何建议。
谢谢你!

jc3wubiy

jc3wubiy1#

你需要让数据变得不那么复杂。试试这个:

import json
from pathlib import Path

import pandas as pd
from evtx import PyEvtxParser

def main(evtx_file: Path) -> list:
    parser = PyEvtxParser(str(evtx_file))
    return [json.loads(r["data"])["Event"] for r in parser.records_json()]

if __name__ == "__main__":
    events = main(Path("C:/temp", "Application.evtx"))
    print(len(events))
    dataset = pd.DataFrame.from_records(events)
    print(dataset)
    print(dataset.info())

PyEvtxParserrecords_json方法完成了部分工作-data键的值是JSON字符串。您需要加载它,然后提取实际的事件有效负载(从Event键的内容中-这是Pandas找到的单个列)。一旦完成了这一点,这个框架就变得稍微有用了一些,但是它仍然包含字典作为内部数据结构,因为事件日志数据实际上是一个相当复杂的对象。您可能需要考虑如何对数据进行预处理和扁平化,以使其对您想要从中提取的内容更有用

相关问题