Я пытаюсь написать приложение пользовательского пространства, которое может подключаться к сетевому стеку ОС, обнюхивать пакеты, пролетающие мимо, и редактировать те, которые его интересуют.
После долгих поисков в Google мне кажется, что самый простой (но достаточно надежный) способ сделать это (на любой платформе) — это Linux libnetfilter_queue
проект. Однако у меня возникли проблемы с поиском какой-либо приемлемой документации для проекта, кроме ограниченной официальной. документация. Его основные функции (как указано в первой ссылке)
- получение пакетов в очереди из подсистемы ядра nfnetlink_queue
- вынесение вердиктов и/или повторная загрузка измененных пакетов в подсистему ядра nfnetlink_queue
Акцент мой собственный. Как именно я имею в виду это сделать? Я попытался изменить предоставленный пример кода, но, возможно, я что-то неправильно понял. Код работает в режиме NFQNL_COPY_PACKET
, поэтому я получаю весь пакет, но мои изменения в нем, по-видимому, ограничены моим собственным приложением, как и следовало ожидать, учитывая семантику "копировать" .
Мне кажется, что я должен каким-то образом использовать NF_QUEUE
, но я не совсем понял это. Любые указатели?
(Если есть более простой механизм для этого, который также является кросс-платформенным, я был бы рад услышать об этом!)