关于Android实现VPN开发方案探索

手上有个Android vpn开发的需求,对这一块也没什么经验,网上找资料发现很有限,整理出来结论如下:

1【知乎】https://www.zhihu.com/question/22675356/answer/22219771

根据 http://stackoverflow.com/questions/10444757/how-to-configure-vpn-programatically
的说法,需要用反射调用一些私有api完成这个工作,还是比较复杂的…
https://code.google.com/p/android/issues/detail?id=8915 这里提到了一些方案…

这个行为似乎是谷歌所不允许的,所以要么你直接获取root权限完成,要么最好还是换一个吧…这个课题似乎有些……难以完成…

2 【EOE】上面这个贴说的比较详尽:目前网上的方案就是两个:1、XinkVPN——限Android2.3以下版本;2、OpenVpn,需要root。http://www.eoeandroid.com/thread-560442-1-1.html?_dsign=74c4cd5a

----------------------------------------------------------

我的客户需求,需要有一个自己的App能够和自己的VPN服务器建立VPN连接,而不是走系统VPN设置.

我先说几点吧:
1.无论是安卓2.3版本还是4.0+版本的系统设置源代码我都已经看过了,基本逻辑为,接收用户输入,模式选择,生成对应的VPNProfile,这是一个基类,根据不同的协议可以进行扩展,例如L2TP/IPSec PSK,亦或是PPTP,亦或是L2TP/IPSec AuthX,之后通过AIDL调用IConnectivityManager中定义的接口完成.
2.VPNProfile,IConectivityManager这些实现设置中VPN功能的核心组件,均在com.android.internal.net包中,我想说道这里就很清楚了,不同于android.net包,前者是谷歌的内部接口,是不对外开放的黑盒组件,安卓2.3上面,有一位大神剥离了部分internal包中的VPN组件,做成了自己的VPN软件可以满足各位的需求,这个东西叫做xinkVPN,但是很抱歉,因为是黑盒,所以4.0之后安卓封闭了许多VPN接口,导致这个开源项目已经不可能用了。
3. 4.0之后,安卓提供VPNService供大家实现自己的VPN应用,这句话我是从DEVELOPER网站上面翻译过来的,意思是什么,意思就是,我只帮你建立最最基础的TUN,后面的工作你自己完成,说道这里大家可能不太清楚,我建议大家去仔细地看一看VPN Protocol到底是什么意思,何为TUN Protocol (PPTP/L2TP/IKEV2),何为加密算法(IPSec/HSSL)
4. 这里说一下楼主你的思路,其实你完全想错了,就像在第三点中我说的那样,PPTP只是一个隧道协议,而这一部分正好是安卓提供给你的,至于为什么你不行,原因是,VPNService使用的TUN技术是不同于安卓设置应用中的那些什么PPTP/L2TP协议的(这些协议的TUN建立,实在linux内核中做的)
----------------------------------------------------------

说了这么多,最后和你说一下解决方案:
1.强行自己在DatagramTunnel中建立协议,不好意思,这个我真不知道,可以说,直到目前,网上没有任何相关资料,无论是google AOSP论坛,statckoverflow,亦或是github上都是一片哀嚎
2.如果你的server是走L2TP.PPTP.CICSO.IKEV2协议的,那么你可以引导用户进入设置界面自行设置
3.OpenVPN,这是目前唯一一个采用了VPNService框架做出来的VPN应用,并且是开源的,如果你的服务器支持OpenVPN协议,那么无疑这是最佳选择

-----------------------------------------------
可能有人会问,为什么OpenVPN可以在VPNService的特殊网络接口中传输加密数据,那是因为OpenVPN协议本身的特殊性(使用TCP/UDP进行封装),TUN协议不是在linux内核中建立而是在应用层建立的。

时间: 2024-10-23 14:01:49

关于Android实现VPN开发方案探索的相关文章

Android开发艺术探索读书笔记——进程间通信

1. 多进程使用场景 1) 应用某些模块因为特殊需求需要运行在单独进程中.如消息推送,使消息推送进程与应用进程能单独存活,消息推送进程不会因为应用程序进程crash而受影响. 2) 为加大一个应用可使用的内存,需要多进程来获取多份内存空间. 2. 如何开启多进程 给四大组件(Activity.Service.Receiver.ContentProvider)在AndroidMainfest中指定android:process属性指定. 如果进程以":"开头的进程,代表应用的私有进程,其

Android开发艺术探索——第二章:IPC机制(中)

Android开发艺术探索--第二章:IPC机制(中) 好的,我们继续来了解IPC机制,在上篇我们可能就是把理论的知识写完了,然后现在基本上是可以实战了. 一.Android中的IPC方式 本节我们开始详细的分析各中跨进程的方式,具体方式有很多,比如可以通过在Intent中附加extras来传递消息,或者通过共享文件的方式来共享数据,还可以采用Binder方式来跨进程通信,另外,ContentProvider天生就是支持扩进程访问的,所以通过Socket也可以实现IPC,上述的各种方法都能实现I

Android 多语言动态更新方案探索

本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/jG8rAjQ8QAOmViiQ33SuEg作者:陈龙 最近做的项目需要支持几十种语言,很多小语种在不认识的人看来跟乱码一样,,翻译一般是由翻译gongsi翻译的,翻译完成后再导入到项目里面,这就容易存在一些问题. 一.问题一:翻译容易出错 翻译的流程是客户端开发编写中文文案---翻译成英文----外包翻译根据英文字符串翻译小语种,在这个流程中,有些多义词和一些涉及语境的词就很容易翻译错误.

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

Android开发艺术探索——第二章:IPC机制(上)

Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化机制和Binder,然后详细的介绍Bundle,文件共享,AIDL,Messenger,ContentProvider和Socker等进程间通讯的方法,为了更好的使用AIDL进行进程间通讯,本章引入了Binder连接池的概念,最后,本章讲解各种进程间通信方式的优缺点和使用场景,通过本章,可以让读者对

【读书笔记】【Android 开发艺术探索】第4章 View 的工作原理

一.基础知识 1.ViewRoot 和 DecorView ViewRoot 对应 ViewRootImpl 类,它是连接 WindowManager 和 DecorView 的纽带,View 的三大流程都是通过 ViewRoot 来完成的.在ActivityThread 中,当 Activity 对象被创建完毕后,会将 DecorView 添加到 Window 中,同时会创建 ViewRoot 对象. DecorView 添加到窗口 Window 的过程. 图片来自https://yq.ali

Android开发艺术探索——第一章:Activity的生命周期和启动模式

Android开发艺术探索--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity中文翻译过来就是"活动"的意思,但是主席觉得这样翻译有些生硬,直接翻译成"界面"可能更好,的确,Activity主要也是用于UI效

Android 开发艺术探索——第十章 Android的消息机制

Android 开发艺术探索--第十章 Android的消息机制读书笔记 Handler并不是专门用于更新UI的,只是常被用来更新UI 概述 Android的消息机制主要值得就是Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑. MessageQueue即为消息队列,顾名思义,它的内部存储了一组消息,以队列的的形式对外提供插入和删除的工作.虽然叫队列,但内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表. Looper意思为循

Android开发艺术探索

Android开发艺术探索1 Activity的生命周期和启动模式 典型情况下生命周期异常情况下生命周期 启动模式标准模式栈顶复用模式栈内复用模式单实例模式 Activity的FlagsIntentFilter的匹配规则 2 IPC机制 进程间通信 SerializanleParcelableBinder 3 View的事件体系 事件分发机制 事件分发机制点击事件就是MotionEvent 事件分发其实就是对MotionEvent事件的分发三大方法dispatchTouchEvent 分发onI