1

我在我的一个项目中使用库 GCDWebServer( https://github.com/swisspol/GCDWebServer ),出于安全原因,这要求我接受仅来自我的应用程序进程的连接。我希望这是 iOS 应用程序沙箱开箱即用的东西,但事实并非如此。沙盒似乎是通过文件系统权限对 UNIX 域套接字 (AF_UNIX) 实施的。但是对于 GCDWebServer 使用的 TCP/IP 套接字(AF_INET),似乎没有沙盒。

我能够编写两个示例应用程序——一个客户端和一个服务器(使用不同的开发人员证书签名),并且可以让它们相互通信,没有任何问题。

我想知道是否有某种方法可以在 iOS 上执行相同的操作,本质上是在 TCP 套接字上启动 HTTP 服务器,但只接受来自同一进程的连接。我不能使用 UNIX 域套接字,因为要从 HTTP 服务器请求内容的客户端是 AVPlayer,它不知道如何连接到我的应用程序的 UNIX 域套接字。

4

2 回答 2

1

有很多方法可以做到这一点:您可以检查 GCDWebServer 中的传入请求并决定是要响应它还是返回错误。

您可以添加其他应用程序不知道的秘密标头,使用密钥对整个请求进行签名等...

于 2017-06-28T19:41:41.400 回答
1

我大约有 99% 的把握,你所要求的是不可能的。我什至认为在 OS X 中不编写网络内核扩展是不可能的(即使那样,这也是具有挑战性的)。

当一个网络请求到达另一个进程时,它已经通过了网络堆栈,并且已经失去了关于哪个进程发起连接的任何概念(除非最近有所改善)。

实际上,您可以获得的最接近的方法是绑定到 localhost 界面上的随机端口,并在您的应用程序进入后台后立即将其拆除。

学究式地,如果你设法以某种方式说服 Apple 你计划构建一个 VPN,理论上可以滥用 VPN API,让你提供一个只在你的应用程序内工作的专用网络。但是,它永远不会被允许在应用商店中使用。

但是你为什么要这样做呢?AVPlayer 不仅能够从文件 URL 播放。

于 2017-06-27T01:21:15.613 回答