Дублирование пакетов после изменения и отправки с помощью необработанных сокетов в C (без iptables)Linux

Ответить Пред. темаСлед. тема
Anonymous
 Дублирование пакетов после изменения и отправки с помощью необработанных сокетов в C (без iptables)

Сообщение Anonymous »

Сейчас я работаю над проектом на языке C, где я захватываю сетевые пакеты, изменяю их заголовки (например, меняю IP-адрес назначения), а затем отправляю измененный пакет в новое место назначения. Однако я столкнулся с проблемой, из-за которой после изменения и отправки пакета он доставляется как в исходный, так и в новый пункт назначения.
Настройка проекта:
  • Платформа: Проект разрабатывается под Linux.
  • < strong>Окружающая среда: я запускаю программу на ВМ, настроенная как шлюз по умолчанию для другой ВМ, эффективно действующая как маршрутизатор.
  • Пересылка пакетов:< /strong> Я также убедился, что на этой виртуальной машине включена пересылка пакетов для облегчения маршрутизации.
Описание проблемы:< /h3>
Несмотря на изменение IP-адреса назначения захваченных пакетов, измененный пакет в конечном итоге доставляется как в исходное место назначения, так и в новое место назначения.
Что я пробовал На данный момент:

Подход 1: libpcap для захвата пакетов, необработанные сокеты для отправки

  • Я захватываю пакеты с помощью libpcap.
  • Изменить заголовки (в основном, изменив IP-адрес назначения).
  • Отправить измененный пакет, используя необработанный сокет.
    />
В результате измененный пакет достигает как исходного, так и нового места назначения.
Подход 2: Необработанные сокеты как для захвата, так и для отправки
Подход 2: Необработанные сокеты для захвата и отправки
Подход 2: Необработанные сокеты для захвата и отправки
Подход 2: Необработанные сокеты для захвата и отправки
h4>
  • Я захватываю пакеты и изменяю их, используя только raw сокеты (без libpcap).
  • Опять же, я меняю IP-адрес назначения и отправляю пакет, используя тот же необработанный сокет.
Этот подход по-прежнему приводит к тому, что пакет достигает обоих пунктов назначения.
Я гарантировал, что заголовки пакета (включая контрольную сумму) правильно обновляются после изменения.< /p>
Я не хочу используйте iptables или любые другие внешние инструменты для этого проекта — я работаю исключительно с библиотеками C и хочу полностью контролировать процесс в коде.
Я не уверен, возникает ли эта проблема из-за того, как я управляю захватом и изменением пакетов, или что-то не так с тем, как сырые сокеты взаимодействуют с сетевым стеком.
Я искал решение онлайн уже несколько дней, но я не нашел ни одного сообщения это фактически решает проблему, с которой я столкнулся.
Кто-нибудь сталкивался с подобной проблемой или есть ли у кого-нибудь предложения о том, как гарантировать, что только измененный пакет будет отправлен в новый пункт назначения и а не исходный пакет?
Есть ли что-то особенное, что я мог упустить из виду с точки зрения поведения необработанных сокетов или того, как ядро ​​Linux обрабатывает маршрутизацию в этом контексте?
Заранее благодарим за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/792 ... no-iptable
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»