我有一个 macOS 产品,它使用网络内核扩展来获取网络数据并根据一些预定义的规则修改数据。
由于从 macOS 10.16 开始将不再支持 kexts,因此我必须移植我的解决方案以使用网络系统扩展。
我无法找出为此目的使用哪些 API。
我查看了内容过滤器下的 NEFilterPacketProvider,它可以为我提供数据包,并且基于我可以允许/拒绝/延迟的规则。但是是否有可能在允许之前执行一些计算并转发被操纵的数据?
NEFilterPacketHandler 以 const void 的形式提供 packetBytes,所以即使可以将 const 丢弃?此外,这里还有其他期望,例如 packetLength 依赖于这些字节保持不变。
typedef NEFilterPacketProviderVerdict (^NEFilterPacketHandler)
(NEFilterPacketContext *context,
nw_interface_t interface,
NETrafficDirection direction,
const void *packetBytes,
const size_t packetLength);