2008-09-15 2 views
4

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

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

ответ

0

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

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

4

См. Разъемы для переадресации: Divert Sockets mini HOWTO.

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

1

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

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

1

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

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

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

Смежные вопросы