Настройка проекта:
- Платформа: Проект разрабатывается под Linux.
- < Strong>Среда: я запускаю программу на ВМ, которая настроена как шлюз по умолчанию для другой ВМ, эффективно действуя как маршрутизатор.
Пересылка пакетов. Я также убедился, что на этой виртуальной машине включена пересылка пакетов, чтобы облегчить маршрутизацию.
Несмотря на изменение IP-адреса назначения захваченных пакетов, измененный пакет в конечном итоге доставляется как исходному пункт назначения и новый пункт назначения.
Что я уже пробовал:
Подход 1: libpcap для захвата пакетов, необработанные сокеты для отправки
- Я захватываю пакеты с помощью libpcap.
- Измените заголовки (в основном меняя IP-адрес назначения).
- Отправьте измененный пакет, используя необработанный сокет.
В результате измененный пакет достигает как исходного, так и нового пункта назначения.Подход 2: необработанные сокеты как для захвата, так и для отправки
- Я захватываю пакеты и изменяю их, используя только необработанные сокеты (без libpcap).
- Опять же, я меняю IP-адрес назначения и отправить пакет, используя один и тот же необработанный сокет.
Я убедился, что заголовки пакетов (включая контрольную сумму) правильно обновляются после модификации.
Я не хочу использовать iptables или любые другие внешние инструменты для этот проект — я работаю строго с библиотеками C и хочу полностью контролировать процесс в коде.
Я не уверен, возникает ли эта проблема из-за того, как Я управляю перехватом и модификацией пакетов, или что-то не так с тем, как сырые сокеты взаимодействуют с сетевым стеком.
Я уже несколько дней ищу решение в Интернете, но я не нашел сообщений, которые действительно решали бы проблему, с которой я столкнулся.
Кто-нибудь сталкивался с подобной проблемой или есть ли у кого-нибудь предложения о том, как гарантировать, что только измененный пакет отправляется в новый пункт назначения, а не исходный пакет?
Есть ли что-то особенное, что я мог упустить из виду с точки зрения поведения необработанных сокетов или того, как ядро Linux обрабатывает маршрутизацию в этом случае? контексте?
Заранее благодарим за любую помощь!
Подробнее здесь: https://stackoverflow.com/questions/792 ... no-iptable