Как использовать расширения сетевой системы для управления данными перед их пересылкой
У меня есть продукт для macOS, который использует расширения сетевого ядра для получения сетевых данных и изменения данных на основе некоторых предопределенных правил.
Поскольку kexts больше не будут поддерживаться, начиная с macOS 10.16, мне нужно перенести свое решение для использования сетевых системных расширений.
Я не могу узнать, какие API использовать для этой цели.
Я просмотрел NEFilterPacketProvider в разделе "Фильтры содержимого", который может предоставить мне пакет и на основе правил, которые я могу разрешить / запретить / задержать. Но возможно ли выполнить некоторые вычисления и переслать обработанные данные, прежде чем разрешить это?
NEFilterPacketHandler предоставляет packetBytes в форме const void, поэтому даже если можно было бы отбросить const? Кроме того, здесь есть другие ожидания, такие как packetLength, которые полагаются на то, что эти байты остаются неизменными.
typedef NEFilterPacketProviderVerdict (^NEFilterPacketHandler)
(NEFilterPacketContext *context,
nw_interface_t interface,
NETrafficDirection direction,
const void *packetBytes,
const size_t packetLength);