Реинжекция сетевых пакетов в сетевой стек (RAW-Sockets)

Я пишу свою магистерскую диссертацию, и у меня есть небольшая проблема с реализацией.

Одна часть диссертации состоит в том, чтобы зашифровать сетевой пакет на ПК A и отправить его на ПК B. Теперь получатель должен расшифровать его и повторно ввести в сетевой стек, чтобы другое приложение могло работать с пакетом.

Для первого теста я использовал ICMP (запрос). Nftables используются для фильтрации трафика в системе A для исходящих пакетов. Если есть соответствующий исходящий пакет, я ставлю его в очередь с помощью nft в пользовательское пространство. Мое C-приложение шифрует его и отправляет с необработанными сокетами. Пакет получен с ПК B. На ПК B у меня есть приложение-фильтр, основанное на необработанных сокетах. Это приложение видит входящий кадр и расшифровывает его. Когда я проверяю результат с помощью wireshark, кажется, что все в порядке. Каждый бит расшифрованного кадра равен битам исходного кадра. Теперь расшифрованный пакет должен быть повторно введен в сетевой стек. Как я упоминал ранее, это делается с помощью RAW-Sockets. Теперь я ожидаю, что этот повторно введенный пакет должен обрабатываться как обычный пакет ICMP-Request. Но это не так. Система получает расшифрованный пакет, но ответ не отправляется.

Есть ли идеи, что происходит? Можно ли внедрить пакет с необработанными сокетами в собственный сетевой стек?

В последние дни я кое-что читал о TUN/TAP. будет ли это правильным способом повторного ввода моих пакетов?

Спасибо за вашу помощь!

С уважением, Андреас


person AndiDT    schedule 24.06.2016    source источник


Ответы (1)


Я заставил его работать.

Я нашел решение здесь: Как внедрить необработанный пакет L2 как входящий пакет в интерфейс в Linux?

При моих первых попытках найти ответ я не нашел эту тему. Но теперь работает нормально!

Решение очень простое. Мне нужен виртуальный интерфейс, подключенный через мост к моему физическому интерфейсу eth0. Поэтому я отправляю пакеты, которые мне нравится повторно вводить в стек, на виртуальный интерфейс. По мосту они были перенаправлены на eth0 и обрабатываются как входящие кадры.

С уважением, Андреас

person AndiDT    schedule 24.06.2016
comment
Я строю туннель Ethernet с необработанными сокетами и столкнулся с той же проблемой, когда ICMP и ping не отвечают, спасибо! - person TheoretiCAL; 22.02.2020