Как использовать расширения сетевой системы для манипулирования данными перед их пересылкой - PullRequest
1 голос
/ 13 марта 2020

У меня есть продукт для 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); 
...