Перезапись сетевых пакетов на лету с использованием libnetfilter_queue

Я пытаюсь написать приложение пользовательского пространства, которое может подключаться к сетевому стеку ОС, обнюхивать пролетающие мимо пакеты и отредактируйте те, которые его интересуют.

После долгих поисков в Google мне кажется, что самый простой (но достаточно надежный) способ сделать это (на любой платформе) - это проект Linux libnetfilter_queue . Тем не менее, я' m возникли проблемы с поиском какой-либо приемлемой документации для проекта, кроме ограниченной официальной документации. Его основные особенности (как указано в первой ссылке)

  • получение пакетов в очереди от подсистемы nfnetlink_queue ядра
  • выдача вердиктов и / или повторное внедрение измененных пакетов в подсистему nfnetlink_queue ядра

. мой собственный. Как именно я имел в виду это сделать? Я попытался изменить предоставленный код sample , но, возможно, я что-то неправильно понимаю. Код работает в режиме NFQNL_COPY_PACKET , поэтому я получаю весь пакет - но мои модификации в нем, похоже, ограничиваются моим собственным приложением - как и следовало ожидать, учитывая семантика «копии».

Мне кажется, что я должен каким-то образом использовать NF_QUEUE , но я не совсем понял это. Есть какие-нибудь указатели?

(Если есть более простой механизм для этого, который также является кроссплатформенным, я бы хотел услышать об этом!)

6
задан Sedate Alien 26 November 2010 в 06:39
поделиться