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

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

Сообщение Anonymous »

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

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

  • Я захватываю пакеты с помощью libpcap.
  • Измените заголовки (в основном меняя IP-адрес назначения).
  • Отправьте измененный пакет, используя необработанный сокет.

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

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

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

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

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

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

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

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

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

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