psort 在做什么
psort.py 是 plaso 的导出与后处理工具:它读取已经生成的 .plaso 存储文件,按过滤表达式或时间切片挑出事件,再输出成 l2tcsv、dynamic、json_line 等格式。因为工作对象是存储文件而不是原始镜像,所以调一次筛选条件不需要重新解析镜像,几分钟就能拿到新结果。规范的用法是先把镜像一次性采集完,后续所有时间窗与条件变化都在 psort 这一层完成。
基本信息
| 适用平台 | Linux/macOS 分析机(plaso 套件) |
|---|---|
| 输入 | log2timeline 生成的 .plaso 存储文件 |
| 主要参数 | 输出格式、输出路径、过滤表达式、时间切片、事件字段选择 |
| 过滤字段 | 常按 date、data_type、source、host、user 组合条件 |
| 输出格式 | l2tcsv、dynamic(SQLite)、json_line、xlsx 等 |
| 执行代价 | 只读存储,不触碰原始证据 |
典型使用场景
- 按时间窗输出:只交付 2 小时的窗口,避免上万行 CSV
- 按字段筛选:只看某台主机或某个账号的事件
- 把筛选结果转成 dynamic 存储,交给 SQLite 反复查询
- 同一份存储按不同问题产出多份 CSV,各自独立复核
- 对比两个时间窗的事件差异,验证处置是否生效
- 把过滤后的结果作为报告附录,控制篇幅
定向导出
定向导出
# 时间窗导出:过滤表达式写在引号内,-o 指定格式,-w 写出文件
psort.py -q "date > '2026-01-01 00:00:00' AND date < '2026-01-03 00:00:00'" case.plaso -o l2tcsv -w window.csv
# 时间切片,产物是独立存储,可用 SQLite 客户端反复查
psort.py --slice '2026-01-01..2026-01-03' case.plaso -o dynamic -w slice.plaso
# 组合条件:限定主机与数据源类型
psort.py -q "date >= '2026-01-02 00:00:00' AND host == 'web-1'" case.plaso -o l2tcsv -w web1.csv
# 导出前先看有哪些输出模块可用
psort.py -o list
# 结果核对:行数、时间范围与期望是否一致
wc -l window.csv; head -2 window.csv | cut -c1-120常见参数逐项
| 参数 | 作用 | 使用要点 |
|---|---|---|
| -o | 选择输出模块(l2tcsv/dynamic/json_line 等) | 用 psort.py -o list 查看本机可用模块 |
| -w | 把结果写入指定文件 | 不写 -w 时结果直接打到终端,长列表容易刷屏 |
| -q | 过滤表达式 | 字段名与引号风格按版本文档写,先小窗口试跑 |
| 时间参数 | 限定事件时间范围(表达式或切片) | 时间按采集侧基准解释,需与 UTC 口径一致 |
| --slice | 按时间段生成新的存储文件 | 产物是独立数据库,查询时注意选对文件 |
| --output-timezone | 控制导出时的时间渲染时区 | 与采集侧一致,防止 CSV 出现非预期时区 |
过滤表达式作用于事件属性而不是原始文本。写条件前先在 pinfo 或小窗口导出里确认字段名与实际取值(如 host 是否为空、data_type 的命名风格),否则条件写错会静默返回零行。
plaso 各版本参数命名有差异:过滤表达式在旧版本中可能作为位置参数传入,新版本提供 -q/--filter 形式的选项。执行前用 psort.py --help 确认,不要把别人环境里的命令直接照抄。