【问题标题】:URL filtering using driver for OS X使用 OS X 驱动程序进行 URL 过滤
【发布时间】:2017-01-16 13:59:46
【问题描述】:

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

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

由于我对驱动程序领域非常陌生,有人可以建议我在这种情况下如何进行。(如何进行的步骤)

注意:我发现了很多与 USB 驱动程序相关的项目/文档,但它们都没有提供足够的想法来继续进行。

【问题讨论】:

    标签: macos driver kernel-extension


    【解决方案1】:

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

    但是,我可以回答的是,如果您确实决定从 kext 中执行此操作,那么您需要查看 Network Kernel Extensions。 p>

    Apple 还提供了the enetlognke example code 来说明如何使用 NKE API。

    【讨论】:

    • 非常感谢您的建议,我仅以 URL 为例,但主要集中在基于数据包的控制和您建议的示例上,这对我理解这个概念很有帮助。因为我知道 kext,我想继续。
    • 但是打印的日志格式为 [...] enetlognke out IPv4 a820662e49ca|000c29f281ec|0800|45000054 98 但我无法从上述输出中检索源 IP 和目标 IP。(我试图将此十六进制值转换为 a820662e49ca 为 ip 格式,但它总是给出错误的 ip 详细信息)。是否有任何方法可以转换上述值。
    • a820662e49ca 看起来像一个 MAC 地址。 (供应商:Apple)示例中的代码 cmets 在打印此输出的位置附近表明数据包是以太网帧 - 因此您很可能需要首先找到 IP 数据包的开始位置,然后检查其标头。
    • 在分析负载后,我能够识别源 IP 地址和目标 IP 地址,但我观察到只有“ping 命令”数据包被记录,但通过浏览器生成的 TCP 数据包没有被记录。有什么方法可以获取这些数据包,还是我在这里遗漏了什么。
    • 请注意,enetlognke 示例是一个接口过滤器,由iflt_attach() 附加 - 它只会记录通过gNameOfInterfaceToFilter 指定的网络接口的数据包(默认为en0)。您确定要过滤的数据包是这种情况吗?对于 IP 级过滤,请考虑使用套接字过滤器(请参阅sflt_register())或 IP 数据包过滤器(请参阅ipf_addv4()/ipf_addv6),具体取决于您要执行的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多