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