Macos 使用OS X驱动程序进行URL筛选

Macos 使用OS X驱动程序进行URL筛选,macos,driver,kernel-extension,Macos,Driver,Kernel Extension,我对我的客户机有一个要求,在这里我需要根据用户输入阻止特定的URL。 我想通过构建一个驱动程序来实现这一点,通过这个驱动程序,我可以得到包含所有细节的数据包响应,通过构建一个应用程序,我可以阻止/允许(这类似于windows中的“netfilter”驱动程序所做的) 但是,当我阅读文档和网站时,我没有得到足够的信息来满足这一特殊要求。(我找到了关于bpf的信息,但没有足够的细节来继续) 由于我对驾驶员领域非常陌生,有人能建议我在这种情况下如何继续。(步骤如何继续) 注意:我发现了许多与USB驱动

我对我的客户机有一个要求,在这里我需要根据用户输入阻止特定的URL。 我想通过构建一个驱动程序来实现这一点,通过这个驱动程序,我可以得到包含所有细节的数据包响应,通过构建一个应用程序,我可以阻止/允许(这类似于windows中的“netfilter”驱动程序所做的)

但是,当我阅读文档和网站时,我没有得到足够的信息来满足这一特殊要求。(我找到了关于bpf的信息,但没有足够的细节来继续)

由于我对驾驶员领域非常陌生,有人能建议我在这种情况下如何继续。(步骤如何继续)

注意:我发现了许多与USB驱动程序相关的项目/文档,但它们都没有给出足够的想法来进一步进行。

URL“非常广泛,根据URL的种类(什么协议?加密呢?)和所需的粒度,除自定义kext之外的其他解决方案可能是更好的方法。不知道你的要求,我不能说是否是这样

然而,我能回答的是,如果你决定从一个kext开始做这件事,你需要研究的是什么


苹果还提供了如何使用NKE API的说明。

非常感谢您的建议,我以URL为例,但主要集中在基于数据包的控制上,您建议的示例帮助我理解了这个概念。据我所知,kext也希望这样做。但是打印的日志格式为[…]enetlognke out IPv4 a820662e49ca | 000c29f281ec | 0800 | 45000054 98,但我无法从上述输出中检索源和目标ip。(我试图将此十六进制值转换为a820662e49ca到ip格式,但它总是提供错误的ip详细信息)。是否有任何方法可以转换上述值。
a820662e49ca
看起来像MAC地址。(供应商:苹果)示例中打印此输出的代码注释表明数据包是以太网帧-因此您很可能需要首先找到IP数据包的起始位置,然后检查其标头。在分析有效负载后,我能够识别源和目标IP地址,但我发现只有“ping命令”数据包正在被记录,但通过浏览器生成的TCP数据包没有被记录。是否有任何方法也可以获取这些数据包,或者我在这里遗漏了什么。请注意,
enetlognke
示例是一个接口过滤器,由
iflt\u attach()附加<代码> >它只记录遍历由<代码> GnAeMeFutFileFilter (默认为En0)指定的网络接口的包。您确定您要过滤的包是这样的吗?对于IP级过滤,考虑使用套接字过滤器(参见<代码> SfttListSub()/代码>)或IP包过滤器(参见代码> IPFIADVv4()。
/
ipf\u addv6
)取而代之,这取决于您尝试执行的操作。