移动平台上是否可以进行TCP数据包过滤?

时间:2014-11-24 14:32:23

标签: android ios networking tcp port

我有兴趣让我的移动应用在后台运行并过滤TCP数据包。

我知道由于沙盒,每个操作系统特权级别以及iOS处理后台任务的方式,我将面临限制,因此我想确认是否可以在iOS和Android上执行此操作。

Android和iOS是否允许您分析和修改通过TCP端口的数据包?如果可能的话怎么样?当我的应用程序保留在后台时,我可以这样做吗?

4 个答案:

答案 0 :(得分:17)

的iOS

我认为在iOS上无法实现。

我没有找到用于网络监控/数据包过滤的公共API。这种API有可能存在,但它是隐藏的。但在这种情况下Apple App Store review guidelines表示:

  

2.5使用非公共API的应用将被拒绝

如果您需要一个特定的引用来表明它是不可能的,您可以使用:

  

iOS不直接支持数据包跟踪。但是,如果您通过USB将iOS设备连接到Mac ...

来自official Apple Technical Q&A QA1176

替代

接下来最好的事情是在“设置”中手动配置代理服务器,然后过滤服务器端的流量。由于iOS后台任务limitations,因此无法在设备上本地运行代理:

  

2.16多任务应用程序只能将后台服务用于其预期目的:VoIP,音频播放,位置,任务完成,本地通知等。

此外,this帖子建议可以在iOS 8上以编程方式设置VPN连接。还需要发送设备的流量,而且我不确定是否符合规定这种方法有指导方针。

非替代

某些应用提供了衡量网络流量的功能。但他们使用专用API进行网络统计:iPhone Data Usage Tracking/Monitoring

还有一些通过USB电缆({3}}在iOS上进行数据包跟踪的方法。

的Android

在Android上,您可以将设备配置为将您的应用用作here。但是:

  • 它要求您显示一个对话框,描述授予VPN作为权限的后果。
  • 您必须在VPN处于活动状态时显示持久通知。执行此操作的应用示例为VPN service

要获得用户许可,请致电VpnService.prepare

public void onClick(View v) {
     Intent intent = VpnService.prepare(getApplicationContext());
     if (intent != null) {
          startActivityForResult(intent, 0);
     } else {
          onActivityResult(0, RESULT_OK, null);
     }
}

并处理结果,启动VpnService。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        Intent intent = new Intent(this, MyVpnService.class);
        startService(intent);
    }
}

您的VpnService必须实施public int onStartCommand()。该服务被视为前台服务,不应被操作系统杀死。

这个问题:tPacketCapture,它的评论揭示了数据包处理本身。

答案 1 :(得分:1)

您可以使用Android VPN服务构建应用程序,这些服务可以执行诸如过滤数据包等有趣的事情。您可以在“Android Samples for SDK”中找到VPN示例,该示例位于Google Source Code

克利夫罗宾逊 社区经理
BackBox

答案 2 :(得分:0)

在iOS上我会说这取决于你是否允许将设备越狱作为可接受的前提条件。对于iOS,有一些引用PF以及network sniffer(我认为必须以类似的方式工作)。

PF是open source但不幸的是用C语言构建。

答案 3 :(得分:0)

此答案仅适用于Android

一般有可能!
但是有一些问题。

这是一个列表什么有用,你会遇到什么问题。

通过VPN服务过滤

  • 对电池的影响非常大
  • 代理支持无法正常工作
  • 允许修改流量

通过libpcap过滤

  • 需要root
  • 不允许修改流量

使用IPTables / PFTables / libnetfilter进行过滤

  • 需要root
  • 需要内核模块
  • 无法在没有内核源或未集成的任何设备上工作

使用Xposed Framework过滤

  • 需要root
  • 仅适用于Dalvik Systems
  • 无法使用NDK构建的应用程序

使用Cydia Substrate过滤

  • 需要root
  • 仅适用于Dalvik Systems
  • 目前处于测试状态

是的,这是可能的,但代价是什么? 如果您只是为自己需要它,那么使用Cydia Substrate就可以了,因为它支持100%的应用程序,但它需要一个dalvik系统。

如果要将其发布到商店,则应使用VPN服务。可以使用NDK创建服务,然后您可能已经降低了电池问题。

我希望我能以某种方式帮助过你。