iOS - 是否可以通过localhost在应用程序之间进行通信?

时间:2012-12-05 23:14:31

标签: ios networking

考虑这种假设情况:

鲍勃和夏娃的应用程序安装在同一部iPhone上。 Bob的应用程序正在运行并绑定到localhost:8080以侦听来自其自己UIWebView的AJAX调用。 Eve的应用程序在后台运行,并试图通过向localhost:8080进行AJAX调用来干扰Bob的应用程序。

两个问题:

  1. 假设Eve的应用程序知道Bob的AJAX API,她的调用会成功吗? (即本地主机上的iOS沙箱流量是什么?)

  2. Eve的应用程序是否有可能嗅到Bob的应用程序正在产生的流量?

1 个答案:

答案 0 :(得分:5)

  1. 如果Bob的应用程序正在运行,那么Eve的应用程序可以连接到它。
  2. 有两种可能的方法可以实现这一点。由于Eve的应用程序在后台运行,因此Bob的应用程序位于前台,Eve的应用程序在后台连接到它。或者,Bob的应用程序在后台运行,Eve的应用程序在前台连接到它。

    默认情况下,iOS会在后台暂停应用。如果应用程序使用后台执行,并继续在后台运行,它可以像往常一样访问网络。

    您可能希望在Apple的technical notes on Networking and Multitasking

    中阅读“Beyond The Basics”
    1. 嗅探流量需要root访问权限,除非Eve的应用程序是越狱应用程序,否则无法完成。
    2. 在文章Wireshark CapturePrivileges的“BSD(包括Mac OS X)”一节中,它指出在BSD系统上我们需要有权访问BPF设备以捕获数据包(读取:嗅探网络流量)。只有root(或任何超级用户)才能访问BPF设备,或授予任何其他用户访问它们的权限。