该包使用 TypeScript(ZeekJS)重新实现了 zeek-notice-telegram,以规避 ActiveHTTP 的不可靠性。
它还借鉴了上述 Yacin 的包,以及 该 包的原始灵感(zeek-notice-slack)的 ZeekJS 重新实现,该实现现在已成为 zeekjs-notice-slack。
可以通过运行 npm install && npm run build 从 TypeScript 源码重新生成 scripts/telegram.js。
基本用法与 zeek-notice-telegram 相同。简单回顾一下,可以这样使用:
@load base/frameworks/notice
export {
redef enum Notice::Type += {
Notice::SSHLoginSuccessful,
};
// NOTE: you must define these!
redef Notice::telegram_token = "xxx";
redef Notice::telegram_chat_id = "yyy";
}
event ssh_auth_successful(c: connection, auth_method_none: bool)
{
NOTICE([$note=Notice::SSHLoginSuccessful, $conn=c, $msg="Login detected"]);
}
hook Notice::policy(n: Notice::Info)
{
if ( n$note == Notice::SSHLoginSuccessful )
{
add n$actions[Notice::ACTION_TELEGRAM];
}
}
通过 telegram 发送通知失败不会停止 notice 钩子处理。相反,提供了 Zeek 钩子来处理错误情况,以及(如果需要)消息成功发送的情况:
Notice::telegram_notice_succeeded:一切正常时触发;Notice::telegram_notice_api_error:Telegram API 本身返回错误时触发;Notice::telegram_notice_network_error:与 telegram API 通信出错时触发。有关使用这些钩子的示例,请参阅 btest 用例。
一个 btest 用例模拟 Telegram API,并覆盖成功及不同的错误条件。
要运行测试,请进入 testing 目录并运行 make。