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