c / c ++ libnetfilter_queue и выбор пакетов прикладного уровня

У меня есть программа на C ++, использующая libnetfilter_queue библиотека, предназначенная для работы в системе Linux.

Мне нужно будет фильтровать только пакеты прикладного уровня (следовательно, пакеты, включая полезную нагрузку для прикладного уровня хоста).

Я знаю, что это невозможно с iptables, без перестройки ядра.
Поскольку я не могу сделать это на конечном хост-устройстве, я работаю с моей программой на С ++.

Моя цель состоит в том, чтобы напрямую принимать пакеты уровня приложения и обрабатывать пакеты уровня 7.

Я пытался использовать nfq_get_payload функция, возвращающая -1 если ошибка (следовательно, я полагаю, нет полезной нагрузки), если найден.

ret = nfq_get_payload(tb, &data);
if (ret < 0) { /* accept packet */ }
else { /* process packet */ }

Я знаю что nfq_get_payload функция зависит от «принятого режима» (см. nfq_set_mode функция), но это не работает для меня.

Как я могу отличить пакеты прикладного уровня от пакетов «нижнего уровня»?

Зная, что ip_src Байт находится в data + 12 (смотрите также Вот), поскольку размер слоя TCP 64 байт, полезная нагрузка должна быть найдена, если она доступна, в позиции data + 12 + 64,

unsigned char* pkt_payload = (buffer + 12 + 64));

Тем не менее, если я попытаюсь напечатать pkt_payload переменная, она не соответствует ожидаемым результатам.

Как я могу решить это?

0

Решение

Задача ещё не решена.

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

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

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