问题标签 [networkextension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
363 浏览

ios - 在 iOS NEDNSProxyProvider 网络扩展上安装 Firebase / Crashlytics

我有一个带有网络扩展的 iOS 应用程序,我正在尝试在两者上安装 Firebase/Crashlytics:

  • 主机应用程序 ( com.mycompany.appname )
  • NEDNSProxyProvider 网络扩展 ( com.mycompany.appname.dnsproxy )

我已经在 Cocoapods 的两个 targhet 上安装了 Firebase,并且我成功地在主机应用程序上配置了 crashlytics,触发了崩溃并在 firebase 仪表板中看到了崩溃。

然后我尝试先使用以下步骤在网络扩展中启用 crashlytics:

来自How to use Crashlytics with iOS / OS X today view extensions?

  1. 从主机应用程序复制GoogleService-Info.plist到网络扩展
  2. 将运行脚本添加到网络扩展 targhet 在此处输入图像描述
  3. override func startProxy(options: [String: Any]? = nil, completionHandler: @escaping (Error?) -> Void) {在我添加的 NEDNSProxyProvider 子类方法中:

显然,扩展程序崩溃了,但没有报告发送到 Firebase 仪表板。

在控制台中我可以看到:

这是有道理的,目标具有不同的 bundleID。

因此,我在 Firebase 项目中使用正确的捆绑 ID com.mycompany.appname.dnsproxy创建了另一个应用程序,我下载了新的GoogleService-Info.plist,运行应用程序并遵循初始应用程序设置,但显然网络扩展从未调用 firebase后端,没有记录引起的崩溃,我什至无法完成初始设置,我被困在这Checking if the app has communicated with our servers. You may need to uninstall and reinstall your app.一步。

任何想法?我在控制台中看不到任何奇怪的 Firebase 日志或错误。

0 投票
1 回答
1069 浏览

ios - 可以在 iOS 中配置/编程 VPN Killswitch 吗?

我一直在研究是否有可能实现以下目标。我有一个 IKEv2 VPN 服务器和一个 Swift iOS 客户端。在客户端,我启用了isOnDemandEnabledon theNEVPNManager并设置了规则以匹配任何内容。

这应该意味着任何访问 Internet 的尝试都应符合此规则,并且只能通过 VPN。(这是我的理解,希望是对的)。

VPN 术语中的 Killswitch 是一项功能,可在 VPN 不可用时立即停止所有互联网流量进出设备。这是为了防止在 VPN 隧道无法访问的情况下发生任何泄漏。这可以像监视当前 IP 地址是否波动一样简单,作为执行此操作的触发器。

我找不到的是,只要OnDemand启用该功能,iOS 10.3+ 是否已经在后台执行此操作?

或者它只是一种在 VPN 掉线后立即重新连接到 VPN 的方法,但流量仍可能在没有 VPN 的情况下泄漏到现有的 4G?

我还没有找到任何关于这方面的信息。有什么建议吗?

0 投票
1 回答
1660 浏览

xamarin - 如何将网络扩展 NEPacketTunnelProvider 类从 Obj-C/Swift 移植到 Xamarin C#?

我正在尝试弄清楚如何进行网络扩展,以便我的 iOS 应用程序可以在 C# 中以编程方式打开自定义 VPN 隧道,但是查看一些类似的 Obj-C 项目我不确定在 Xamarin 中是否可行(因为我在 Visual Studio 中看不到网络扩展项目)以及如何移植我收集的是必需的 PacketTunnelProvider 类,我认为该类必须存在并首先在 plist.info 中列为扩展...我特别在如何移植该类的最后作为扩展名出现的部分和一些事件处理程序时遇到最大的麻烦func Adapter(adapter: Adapter, configureTunnelWithNetworkSettings networkSettings: NEPacketTunnelNetworkSettings, completionHandler: @escaping (AdapterPacketFlow?) -> Void )func Adapter(adapter: Adapter, handleEvent event: AdapterEvent, message: String?)因为它们的签名都不同于 C# 中的事件处理程序,它接受 sender 和 eventArgs(或派生的东西)......如果有人在 C# 中这样做,我会至少想知道是否可以移植这样的课程?

我找到了这个项目https://github.com/ss-abramchuk/OpenVPNAdapter(因为它似乎完成了我想要的大部分工作),我设法将其转换为 Xamarin 绑定库,但我不确定如何以及是否将其 PacketTunnelProvider 类合并到 Xamarin 中(正如自述文件所说,您应该使用它来合并类似该适配器的内容)...我认为应该首先向 plist.info 添加类似这样的内容:

但是你从那里去哪里使用绑定库?这是 Obj-C 代码,它说并且似乎做了我想做的事,即使用库将该自定义 VPN 协议隧道添加到应用程序:

那么我如何移植到 C# 或者我做错了(因为下面的评论 - 绑定 dll 大于 15MB - 或者是与文件大小无关的内存使用限制) ? 我实际上是否应该只是引用自定义 VPN 库以直接从代码打开 VPN 隧道并像往常一样从那里继续(因为我还发现了一个项目/应用程序https://github.com/passepartoutvpn它使用TunnelKit cocoapod,但该应用程序的库不能与 Sharpie 一起使用来制作绑定库,如果是这样,这样的应用程序甚至可以被 AppStore 接受吗)?感谢您提前提供任何帮助。


根据@SushiHangover 的建议,我已经尝试绑定 TunnelKit,因为该项目看起来更小,并且部分成功......我已经设法构建了 ~3MB dll,它似乎比 21MB OpenVPNAdapter 小得多,我想我几乎那里有 NetworkExtension 项目......我只是想弄清楚我对@escaping completionHandler 做得好吗以及如何获得一些我猜应该以某种方式在主机应用程序中设置的组常量?

我现在已经注释掉了 groupcontants 但至少我希望这是对 Swift3 的足够好的移植:

如果其他人知道组常量以及如何获取它们,我将不胜感激(但我还应该注意,Sharpie pod没有提供/公开我应该分配的任何字段。也许我做错了,因为那是 TunnelKit与 OpenVPNAdapter 不同的是,它是一个完全 Swift3 的项目:/

0 投票
1 回答
342 浏览

ios - NetworkExtension 监控 WiFi 网络变化,即使应用程序未运行

我希望能够根据他当前的 wifi 网络向用户提示上下文本地通知。为此,我需要监控网络变化/ wifi 连接。

在应用程序运行时这样做似乎并不困难,但我正在尝试一种始终可靠的方法,即使应用程序处于后台或被终止。我正在考虑使用 a NetworkExtension,更准确地说是 a NEHotspotHelper

有没有人对此有任何见解,知道它是否可行/好/坏?我在谷歌上找不到任何关于它的信息。

最有希望的是NWPathMonitor,但是在网络扩展中使用它是让它始终运行的方式吗?

0 投票
0 回答
250 浏览

ios - 如何在 iOS 中使用 VPN 跟踪每个应用程序消耗的数据

最近我从应用商店下载了 My Data Mgr,他们似乎通过 vpn 跟踪每个应用的数据使用情况。我在vpn和设置方面没有足够的知识。但我猜他们正在建立一个本地 vpn 并通过这个 vpn 传输所有网络数据并分析每个应用程序的数据。

谁能帮我理解这个工作流程以及我该如何实现它。

这是我的数据管理器使用的 VPN 配置的屏幕截图

我知道这是一个非常广泛的问题,但我想指出一个特定的方向。

我发现了一个类似的问题,请不要将其标记为重复。那里没有给出正确的答案。

0 投票
1 回答
276 浏览

ios - 如何在 ipv6 环境中使用 NEPacketTunnelProvider

我的应用程序IPv4使用NEPacketTunnelProvider. 隧道系统运行良好,但在 IPv6 中无法运行。

我正在尝试使我的VPN应用程序适应ipv6环境,但我不知道如何开始,请告诉我该怎么做。

这是我的代码:

0 投票
0 回答
500 浏览

ios - 如何调试网络扩展

我阅读了此处此处所写的所有内容,但我的断点仍然不起作用(NSLog 和 os_log 也不起作用)。

这是我在self.providerManager?.connection.startVPNTunnel() MyAppConfig 的上次断开连接错误从“由于发生内部错误而导致 VPN 会话失败”后在控制台中看到的内容。为“无” MyAppConfig 的上次断开连接错误从“无”更改为“VPN 会话失败,因为发生了内部错误。”

我试图监控 VPN 状态(NSNotification.Name.NEVPNStatusDidChange)的变化事件,这就是我所看到的: VPN 状态改变:连接中... VPN 状态改变:断开连接...

我什至无法弄清楚一个方法是否 func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void)适用于我的类 PacketTunnelProvider。

更详细一点,我没有在可用扩展列表中看到我的网络扩展(例如,在 Instruments 中)。

我还能尝试做些什么来调试,我怎么能理解我的扩展是否有效?

0 投票
0 回答
568 浏览

swift - 如何让 App-to-Per-App VPN 在 MAC OSX 上运行?

我正在尝试了解有关 NEAppProxyProvider 的更多信息,因为我正在尝试为每个应用程序 vpn 开发一个 mac OSX。

已经实现的是可以启动应用代理,并且使用 SafariDomains 设置来自 Safari 的流可以由 AppProxyProvider 中的 handleNewFlow 捕获。现在,我正在尝试使用配置文件中设置的 com.apple.vpn.managed.appmapping 从指定的应用程序中捕获一些其他流。但是安装配置文件后,配置文件中只显示一个设置。我用谷歌搜索试图找到个人资料的示例或​​模板,但没有得到任何帮助。请帮我检查以下配置文件,看看是否有任何问题。

这是在数组中包含两个字典的配置文件。第一个 dict 适用于 Safari 流。第二个字典适用于每个应用程序的 vpn,但它似乎无法正确安装并且不起作用。自从我从苹果开发者论坛了解到 SafariDomains 不能与应用程序映射一起使用后,SafariDomains 部分已被删除。

应该怎么修改,让appproxyprovider的handleNewFlow方法捕获指定应用的网络流量?或者有人可以粘贴一个可行的配置文件吗?

0 投票
0 回答
302 浏览

ios - startVPNTunnelWithOptions 不返回错误

我正在尝试设置自定义的 vpn 隧道

startVPNTunnelWithOptions启动自定义隧道,如下所示

使用假凭据进行测试时(使用正确的凭据可以正常工作),它应该打印 startError,但事实并非如此。我可以确认startTunnelWithOptions它实际上从 NSLog返回newError ,但不知何故, startVPNTunnelWithOptions没有返回任何错误。

有人可以帮忙吗?

谢谢

0 投票
0 回答
1559 浏览

ios - 使用没有代理的 NEPacketTunnelProvider 读取数据包

我想在没有指定代理的情况下使用NEPacketTunnelProvider检查数据包。不幸的是,我的readPacketObjects完成处理程序从未被调用,我不明白为什么。我的常规互联网连接停止,Wireshark 在新界面上显然没有显示任何内容,而且我在 en0 上也看不到任何 HTTP 连接。

这可能吗?Apple Developer Forums建议它可能不是……但 Charles Proxy for iOS 似乎能够检查所有内容。

我的代码如下:

控制台输出

编辑 1在修改为具有更具体子网掩码的本地地址
后,我能够读取数据包。settings.ipv4Settings但是,互联网连接仍然断开并route get输出错误的地址。

编辑 2
我可以通过将 DNS 服务器添加到 excludeRoutes 来让 DNS 工作,如此处所示。不加修改地写入 packetFlow 仍然无法启用完整路由。