如何与应用程序交互 kext os x 网络过滤器?

How to make interaction kext os x network filter with application?

我正在为 os x 编写网络过滤器内核扩展。 我想在 kext 中调用回调之类的东西。 例如,在 data_in 函数中,当我收到一个 tcp 数据包时,我想从用户应用程序调用此回调。应用程序更改此数据包,然后我将其注入。 如何在 kext 和用户应用程序之间进行这种交互?

首先,您不想阻止 data_in 回调 - 您应该 "swallow" 数据包,将其发送到用户空间,当它返回时,将其重新注入连接。

有几种方法可以与用户空间进程交换数据。交换网络数据包最方便的方法可能是 kernel control 机制,它本质上允许您在用户程序和您的 kext 之间打开套接字连接。

Apple 曾经提供示例源代码,"tcplognke" 做了一些非常相似的事情,但它似乎已经从他们自己的网站上消失了。有人好心地保存了它 offering it for download - 我现在看起来不错,但显然要小心从随机网站下载东西。