Вопрос

Это не просто съемка, которую я хочу сделать здесь.Я хочу сначала захватить пакет, затем в режиме реального времени проверить полезную нагрузку на наличие определенных данных, удалить ее, ввести подпись и повторно вставить пакет в стек для отправки, как и раньше.

Я прочитал о перенаправляющих сокетах ipfw с использованием IPFW, и это выглядит очень многообещающе.Как насчет примеров изменения пакетов и повторного ввода их обратно в стек с использованием перенаправляющих сокетов?Кроме того, из любопытства, можно ли было бы прочитать данные из сокета, используя Java, или это ограничило бы меня искажением упаковки, повторным внедрением и т.д.?

Это было полезно?

Решение

Я собирался повторить другие ответы, в которых рекомендованы iptables (в зависимости от сложности обоих шаблонов, которые вы пытаетесь сопоставить, и изменений пакета, которые вы хотите внести) - пока я не обратил внимание на тег BSD в вопросе.

Как Стивен Пеллисер как уже упоминалось, libpcap - хороший вариант для захвата пакетов.Однако я полагаю, что libpcap также можно использовать для отправки пакетов.Для справки, я почти уверен, что tcpreplay - подготовка использует его для воспроизведения файлов в формате pcap.

Другие советы

Смотрите раздел отводные розетки: Мини-ИНСТРУКЦИЯ по отводу розеток.

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

Если вы просто ищете способ захвата пакетов, libpcap очень популярен.Он используется в базовых инструментах, таких как tcpdump и ethereal.Что касается "подключения к стеку", если только вы не планируете коренным образом изменить способ реализации сети (т. е.добавьте свой собственный уровень или измените поведение TCP), ваша идея использовать IPF для модификации пакетов или вмешательства кажется лучшим выбором.В Linux у них есть определенная цель перенаправления для модулей пользовательского пространства, IPF, вероятно, имеет что-то подобное, или вы могли бы изменить IPF, чтобы сделать что-то подобное.

Если вам просто интересно посмотреть пакеты, то libpcap - это правильный путь.Вы можете найти его по адресу: http://www.tcpdump.org/

Я думаю, это можно сделать в пользовательском пространстве с помощью целевого объекта QUEUE или NFQUEUE iptables.Клиентское приложение подключается к очереди и получает все соответствующие пакеты, которые оно может изменить до их повторного ввода (оно также может удалить их, если захочет).

Существует клиентская библиотека libnetfilter_queue, с которой ему нужно связать.К сожалению, документация минимальна, но есть несколько сообщений в списке рассылки и примеров.

По соображениям производительности вы захотите делать это не с каждым пакетом, а только с определенными соответствующими пакетами, которые вам придется сопоставлять, используя стандартные правила iptables.Если этого недостаточно, вам нужно будет написать свой собственный модуль ядра netfilter.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top