Я пытаюсь прочитать файл со списком IP-адресов, а другой - с доменами, в качестве доказательства концепции Input Framework, определенной в https://docs.zeek.org/en/stable/frameworks/input.html
Я подготовил следующие скрипты:
reading.bro:
type Idx: record {
ip: addr;
};
type Idx: record {
domain: string;
};
global ips: table[addr] of Idx = table();
global domains: table[string] of Idx = table();
event bro_init() {
Input::add_table([$source="read_ip_bro", $name="ips",
$idx=Idx, $destination=ips, $mode=Input::REREAD]);
Input::add_table([$source="read_domain_bro", $name="domains",
$idx=Idx, $destination=domains, $mode=Input::REREAD]);
Input::remove("ips");
Input::remove("domains");
}
И скрипт bad_ip.bro, который проверяет, есть ли IP в черном списке, который загружает предыдущий:
bad_ip.bro
@load reading.bro
module HTTP;
event http_reply(c: connection, version: string, code: count, reason: string)
{
if ( c$id$orig_h in ips )
print fmt("A malicious IP is connecting: %s", c$id$orig_h);
}
Однако, когда я запускаю братан, я получаю ошибку:
error: Input stream ips: Table type does not match index type. Need type 'string':string, got 'addr':addr
Segmentation fault (core dumped)