Подключение к стеку TCP в C - PullRequest
       14

Подключение к стеку TCP в C

4 голосов
/ 15 сентября 2008

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

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

Ответы [ 4 ]

4 голосов
/ 15 сентября 2008

См. Переадресационные розетки: Перевернутые розетки mini HOWTO .

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

1 голос
/ 20 сентября 2008

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

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

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

1 голос
/ 15 сентября 2008

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

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

0 голосов
/ 20 сентября 2008

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

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

...