Android流量IP解剖方案

Android为VP*服务提供了一个用户级接口,开发只需关注与远程服务器的交互。其他操作如虚拟接口创建、地址和路由配置都是由操作系统完成的。

1.从客户端建立VP*连接

对于客户端,必须通过调用vp*服务准备,目的确保只有一个活动的VP*连接。如果已经有一个准备好的VP*连接(例如,停止然后手动启动同一个VP*连接),则返回空值。在这种情况下,我们应该手动调用onActivityResult函数。

下面是用于在Button的onClick回调上启动VP*服务的代码

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

intent完成或返回空值后,可以通过调用startService启动VP*服务,参数为VP*服务的intent。

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

2.实现VP*服务

扩展服务类时,必须实现两个函数:onStartCommand和onDestroy。通常可以使用一个线程在后台提供服务,这些服务可以在上述函数中启动或中断/销毁。

Android为VP*服务创建TUN接口,并提供应用程序用来与TUN交互的API。我们应该执行以下操作来实现VP*服务:

1、使用生成器获取TUN的接口(FileDescription)。可以通过生成器配置ip地址、dns和路由表。请确保正确调用了addRoute,因为路由表决定将哪个包路由到TUN。

2、获取接口的输入和输出流。输入流和输出流用于以流的方式读写包。

3、连接到VP*服务器。程序员可以制作各种逻辑来处理包,通常使用连接来将包隧道到远程VP*服务器。

4、保护隧道套接字不受VP*服务的影响。为了避免数据包的处理循环(隧道数据包被路由回远程服务器以外的TUN),必须保护连接(保持不受影响)不受VP*服务的影响。

5、数据包循环。

inputstream(in)、outputstream(out)、隧道连接(tunnel)和远程服务器的工作方式如下:

Network Activity -> TUN -> in -> tunnel -> Remote Server
Network Activity <- TUN <- out <- tunnel <- Remote Server

3.bypass实现

使用该服务,我们可以构建多种有趣的应用程序,如代理、包过滤器、带宽节省器。Android Samples for SDK(文件路径:SDK\Samples\Android-17\ToyVp*)中有一个示例(ToyVp*)。

在这里,我们将实现一个包绕过功能,在没有远程服务器的情况下,我们绕过/过滤通过VP*服务的包。

TUN正在OSI第3层工作,所以这里读写的是IP包。从应用层来看,Android/Java不支持原始socket,不能直接绕过这些IP包进入网络接口。但是我们可以保护socket不受VP*服务的影响,因此可以使用受保护的socket来发送/获取数据包。TCP/UDP套接字正在OSI第4层上工作,因此我们需要在此处执行层转换:

1、从TUN获取IP包。与所有VP*服务相同。

2、提取第4层信息。协议类型(如TCP/UDP)及其负载是必须的。由于TCP中有一个握手过程,在从中获取实际有效载荷数据之前,我们需要先写回握手包。

3、选择相应的套接字发送有效负载。由于这一步是在第4层上执行的,所以我们需要保存套接字,稍后再尝试获取返回数据。如果有任何返回数据,我们需要将这些数据包传递给TUN。

4、从socket获取数据包,并构建一个第3层数据包。首先,我们需要建立一个有效的第4层包。由于4字节的UDP报头只包含源地址、源端口、目标地址和目标端口,UDP更容易一些。由于TCP是一个状态连接,所以它更复杂,应该正确设置序列号和确认号。然后,使用第4层包作为负载,我们需要构建一个有效的第3层包。

5、将IP数据包写回TUN。与所有VP*服务相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值