Назад | Перейти на главную страницу

Захват пакета на уровне MAC

Я хочу реализовать решение безопасности, подобное MACsec, которое полностью захватывает пакет (включая заголовок MAC) на промежуточном сетевом узле (например, коммутатор на базе Linux), выполняет некоторую обработку пакета, а затем отправляет его на промежуточный узел. .

Не могли бы вы указать мне на соответствующие ресурсы, которые могут помочь мне в этом. В настоящее время я ищу решения, требующие модификации драйвера сетевой карты. Есть ли другое более простое решение, чем это? Как другие реализуют MACsec?

Обратите внимание, что я не собираюсь просто захватывать пакет с помощью pcap и аналогичных методов. Я ищу возможность захватить пакет до того, как он пройдет через промежуточный узел, вмешаться в него и отправить предполагаемому получателю.

Спасибо

Если вы хотите анализировать пакет по мере его получения ядром Linux, вам придется написать драйвер ядра, возможно, даже до изменения самого ядра. Когда интерфейс получает данные, обработка начинается немедленно. У всего, что зарегистрировано для получения следующего уровня, будет вызван его обработчик. Поскольку MAC-заголовок не требует особой обработки, обработчик уровня IP первым начинает выполнять большую часть обработки.

Если вы хотите манипулировать заголовком MAC и делать свои собственные вещи, вам придется вставлять себя сразу после получения заголовка MAC и до обработки IP. Или вы можете написать драйвер для виртуальной сетевой карты. Таким образом вы сможете обрабатывать данные по своему усмотрению. Виртуальный сетевой адаптер будет видеть все данные так же, как и реальный сетевой адаптер. Вероятно, это будет ваш лучший выбор, поскольку вы не хотите начинать возиться с ядром и перестраивать его только для своего собственного проекта.

Мой ответ здесь дает несколько хороших ссылок для изучения сетей ядра Linux. Я бы также посоветовал взять Linux Kernel Networking: Implementation and Theory от Rami Rosen. Отличный ресурс для подробного изучения сетевого стека.

MACSec в какой-то момент будет реализован в ядре. IPSec, например, сохраняет свои политики безопасности в ядре, в то время как демон пользовательского пространства отслеживает туннельные соединения. Так что, к сожалению, я считаю, что вам придется написать некоторый уровень кода ядра для выполнения желаемых действий.

Некоторое время назад я хотел немного поиграть с пакетами данных, такими как уровень 2, уровень 3 или более высокие уровни. Для этого я нашел хороший инструмент, основанный на python. Этот инструмент вызывает Scapy.
Вы можете захватывать пакеты и управлять ими. Или вы можете создать фильтр на основе пакетов для ваших нужд.