Получить пакет в сыром виде с помощью netfilter

Я хочу инкапсулировать весь трафик в UDP. Я могу захватить это уже и отправить вперед. Но сейчас я хочу сделать инкапсуляцию. Для этой задачи мне нужно получить полный пакет в необработанном виде. Но как я могу это сделать? Мой код

while ((rv = recv(fd, buf, sizeof(buf), 0)))
{
printf("pkt received\n");
nfq_handle_packet(h, buf, rv);
}

Должен ли я сделать это в моем обратном вызове? Если так, то как? Или я могу просто установить NF_DROP в моем обратном вызове, и использовать ЬиЕ а также оборот от в то время как цикл?
Я могу только найти функцию из netfilter, чтобы получить полезную нагрузку, dst, src и т. Д., Но не пакет в необработанном виде. Или я могу как-то переосмыслить nfq_data в char *?

0

Решение

Вы действительно захотите сделать это в вашем обратном вызове. Вы захотите вызвать nfq_get_payload, который даст вам указатель на все содержимое пакета, включая заголовки IP и UDP. В зависимости от того, как вы будете инкапсулировать пакет, вы можете вызвать nfq_set_verdict с указателем на новые данные пакета или отбросить пакет с помощью NF_DROP, а затем повторно внедрить вновь инкапсулированный пакет через необработанный сокет или что-то подобное.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]