首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在macOS中用NetworkExtension实现NetworkExtension过滤器

在macOS中用NetworkExtension实现NetworkExtension过滤器
EN

Stack Overflow用户
提问于 2020-09-26 11:23:59
回答 1查看 412关注 0票数 1

我正在为个人使用的macOS开发一个网络过滤应用程序。该应用程序应该捕获系统上的web浏览器应用程序生成的所有出站HTTP请求,并通过在本地DB中查找它们的URL来过滤(允许或删除)它们。

为此,我遵循作为WWDC 2019会话“现代Mac的网络扩展”的一部分提供的“现代Mac的网络扩展”应用程序的示例代码。

下面是我的NEFilterDataProvider子类

代码语言:javascript
复制
import NetworkExtension
import os.log

class FilterDataProvider: NEFilterDataProvider {

    override func startFilter(completionHandler: @escaping (Error?) -> Void) {
        let filterSettings = NEFilterSettings(rules: [NEFilterRule(networkRule: NENetworkRule(
            remoteNetwork: nil,
            remotePrefix: 0,
            localNetwork: nil,
            localPrefix: 0,
            protocol: .TCP,
            direction: .outbound
        ), action: .filterData)], defaultAction: .allow)
        apply(filterSettings) { error in
            if let applyError = error {
                os_log("Failed to apply filter settings: %@", applyError.localizedDescription)
            }
            completionHandler(error)
        }
    }

    override func handleNewFlow(_ flow: NEFilterFlow) -> NEFilterNewFlowVerdict {
        guard let socketFlow = flow as? NEFilterSocketFlow,
              let url = socketFlow.url else {
                return .allow()
        }

        /* .drop() if url found in local DB */

        return .allow()
    }
}

虽然,我能够在handleNewFlow中捕获url,但这似乎不是一个优雅或最佳的解决方案。我非常关注性能,因为它捕获了系统上任何应用程序生成的所有TCP出站流量,而不仅仅限于来自web浏览器应用程序的HTTP出站流量。

我可以想出可能的解决方案,但我无法找到在macOS上实现该功能的API:

  1. 作为浏览器流,您是如何获得流的,比如NEFilterBrowserFlow,但不仅适用于基于WebKit的浏览器,而且适用于所有浏览器?
  2. 如果#1不可能,那么如何使像sourceAppIdentifier这样的东西与浏览器应用程序的包标识符相匹配?
  3. 如果可能,如何只过滤HTTP通信量?
EN

回答 1

Stack Overflow用户

发布于 2022-03-24 07:43:00

我意识到这是一个相当晚的答复,但我偶然看到这篇文章时,查看内容过滤器提供者本人。我可以看到,您已经有了将其转换为NEFilterSocketFlow的逻辑。你也试过选NEFilterBrowserFlow吗?这将为您提供WebKit浏览器流。至于处理其他浏览器,它们都是在幕后使用WebKit,因此它应该涵盖所有浏览器。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64077093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档