Я использую очереди netfilter в Ubuntu 14.10. Пока все работает, пакеты вижу и выношу вердикт, но хотелось бы получше понять, что я читаю из очереди.
Начиная с этой страницы.
Это код, о котором идет речь:
fd = nfq_fd(h);
while ((rv = recv(fd, buf, sizeof(buf), 0)) >= 0)
{
printf("pkt received\n");
nfq_handle_packet(h, buf, rv);
}
В момент, когда у них есть printf()
, что именно было прочитано из fd? Я предполагаю, что это пакет, которому предшествует какой-то заголовок, специфичный для сетевого фильтра, но я понятия не имею, что это за заголовок. Я просматриваю дамп байтов, которые читаю, но нигде не вижу действительных L2, L3 или L4.
Обратите внимание, что согласно документации я настроил очередь в режиме копирования с помощью этой строки:
nfq_set_mode(qh, NFQNL_COPY_PACKET, 0xffff);