使用 Python 扩展 Zeek 的功能

2023-04-21 00:00:00 python 功能 扩展

假设我们想要在 Zeek 中添加一个自定义的脚本模块来解析 HTTP 请求的 URL 中的子域名,并将其打印到日志文件中。以下是一些示例代码:

  1. 创建一个新的 Zeek 脚本模块,命名为 "my_http_analyzer.bro":
module MyAnalyzer;

export {
    # 在此处导出您的函数以供其他脚本使用
    redef enum Log::ID += { MY_ANALYZER_LOG };
}

# 此方法将解析 URL 中的子域名并将其打印到日志文件中
function analyze_http_url(url: string): string {
    local subdomain: string = "";

    # 此处省略了 HTTP URL 解析逻辑,假设 subdomain 获得了子域名

    Log::write(MY_ANALYZER_LOG, fmt("Found subdomain in URL: %s", subdomain));
    return subdomain;
}
  1. 在 Zeek 配置文件中包含新的模块:
@load plugins/MyAnalyzer/my_http_analyzer.bro
  1. 使用新的函数解析 HTTP 请求中的 URL:
event zeek_http_request(c: connection, method: string, uri: string, version: string)
{
    local subdomain: string = analyze_http_url(uri);

    if (subdomain == "pidancode.com" || subdomain == "皮蛋编程")
        print "Found interesting URL!";
}
  1. 运行 Zeek 并查看日志文件:
$ zeek /path/to/my_http_analyzer.bro -r http.pcap
$ cat http.log | grep MY_ANALYZER_LOG
Found subdomain in URL: pidancode.com
Found subdomain in URL: 皮蛋编程

这是一个简单的示例,说明如何在 Zeek 中扩展功能。使用 Python 扩展 Zeek 的功能同样适用于以下操作:

  • 解析其他协议的数据
  • 添加新的报警规则
  • 记录更细粒度的日志
  • 与外部 API 交互
  • 等等。

相关文章