Добрый день, я захватываю данные системные вызовы :
SEC("kretprobe/tcp_v4_connect")
int BPF_KRETPROBE(tcp_v4_connect_ret, int ret)
{
return handle_kernel_event(ctx, ret, AF_INET, EVENT_CONNECT);
}
SEC("kretprobe/tcp_v6_connect")
int BPF_KRETPROBE(tcp_v6_connect_ret, int ret)
{
return handle_kernel_event(ctx, ret, AF_INET6, EVENT_CONNECT);
}
SEC("kretprobe/inet_bind")
int BPF_KRETPROBE(ipv4_bind_exit, int ret)
{
return handle_kernel_event(ctx, ret, AF_INET, EVENT_BIND);
}
SEC("kretprobe/inet6_bind")
int BPF_KRETPROBE(ipv6_bind_exit, int ret)
{
return handle_kernel_event(ctx, ret, AF_INET6, EVENT_BIND);
}
Я бы хотел также отлавливать событие закрытия сокета. Т.е. для
sock_bind = bind(22222);
close(sock_bind);
sock = connect('127.0.0.1', 22222);
close(sock);
По логике это событие должно генерироваться на close() сокета. Как правильно и легко поймать это событие? Искал вот здесь пример, но не нашел. https://github.com/iovisor/bcc/tree/master/libbpf-tools.
P.S с другой стороны соедиенение может быть закрыто с remote и помойму close тогда не произойдет(ошибаюсь?), а мне нужно именно событие окончания соедиения. Эта помарка не для bind() событий.