华为AnyOffice eSDK 手机端内外网通信的正确姿势

标签: socket android 移动平台 华为 vpn
591人阅读 评论(0) 收藏 举报

华为AnyOffice实现了一整套移动平台接入方案和管理方案,但是其提供eSDK对开发者并不是很友好,比如eSDK提供了都是第七层HTTP协议的API,只能使用它提供的几个类进行操作,很不灵活而且局限性比较高,通过本文可以帮助你解决以下几个问题。

注:本文的讨论基于华为eSDK RC10 2017年9月的版本,RC10版的Demo,L4VPN模式


1、通过eSDK传输非HTTP协议的其他TCP协议的数据,比如FTP,SFTP,SSH,POP3,SMTP,即时通讯框架等。

2、通过eSDK实现内网外网自由访问,用于集成第三方地图,消息推送等。

3、通过eSDK使用Retrofit,Volley,OKHttp等网络框架访问内网

4、通过eSDK使用HTTPS协议内网Web服务


首先以Android端为例,简单强调一下eSDK提供的访问内网的接口有如下几个

SvnHttpClient:继承于DefaultHttpClient,通过该类发送的数据会通过隧道,获取方式new SvnHttpClient();使用SvnHttpClient与DefaultHttpClient不冲突,也就是说你可以同时用SvnHttpClient走内网,用DefaultHttpClient走公网


HttpURLConnection: 获取方式URLConnectionFactoryHelper.setURLStreamHandlerFactory(),该设置不可逆;执行之后所有通过HttpURLConnetion发出的请求都是隧道内请求,没执行的时候是可以访问公网的,所以HttpURLConnection只能在公网和内网中选择一个通信,但不会影响SvnHttpClient和WebView的网络访问规则


WebView:获取方式SvnWebViewProxy.getInstance().setWebViewUseSVN(WebView),该设置不可逆;参数为Android原生WebView的引用,设置后该WebView就通过隧道进行通讯,注意没设置之前是可以访问公网,设置之后只能访问内网。此处要特别注意:一旦设置了WebView走内网,那么HttpURLConnection,DefaultHttpClient就都自动全部变成内网了,此时你就相当于开启了全局的HTTP代理,非常容易出问题。


SvnSocket:继承与java.net.Socket;获取方式 new SvnSocket();不影响其他程序的网络访问规则;该类实现了原生Socket的大部分方法,比如最重要的getInputStream和getOutputStream,但是比如setKeepAlive()这样的方法就没有实现,如果调用直接就会报Exception。。有了它,我们就可以通过Socket编程实现一个四层的TCP隧道,这个是科学使用eSDK的关键所在。


那么使用华为eSDK需要如下几个原则:


一、一定不能使用 SvnWebViewProxy.getInstance().setWebViewUseSVN(WebView) 

因为一旦执行了该条语句,那么会在手机里建立一个全局的HTTP代理,所以不管HttpClient还是HttpURLConnection还是其他的WebView,在执行过该条语句之后全部不能连接公网,只能走内网了,这不是我们想看到的


二、并不是走内网VPN就不能访问公网

不要忘了SDK建立VPN时候的网关是一台放在公网上的主机,所以即使你的HttpClient,HttpURLConnection 设置了走SVN通道,他们把请求发到了你的SVN网关,SVN网关也会把你的请求发送到公网上再返回给你。就像你平时在家用VPN一样的效果。所以当你设置成走内网时发现还能访问到百度等公网网站就觉得自己代码写错了是自己吓唬自己。验证方法就是,对于WebView,可以打开http://www.baidu.com 搜索ip,就会显示你当前的公网IP,判断这个公网IP是网关IP还是你自己手机的IP即可。对于HttpClient和HttpURLConnection,OkHttp,Socket等可以发送http请求到http://www.ip111.cn,查看返回的数据,能看到你的公网IP,如下图

(注1:该页面为华为官方提供的Android Demo 可以在公网和内网两个选项中切换,非常好用)

(注2:要想实现手机端通过网关访问公网,那么网关主机的防火墙限制要松一些,详细的说就是不要只允许RELATED和ESTABLESHED连接通过而拒绝SYN包,再详细点说就是-m state --state RELATED,ESTABLISHED -j ACCEPT 然后默认DROP这种语句不要出现)

    

3、内网连接就走127.0.0.1,公网原先怎么走还怎么走

通过SvnSocket我们可以建立一条连通手机与后端应用服务器的TCP隧道,所有TCP的上层协议都可以走,比如HTTP(s),FTP,SSH,POP3,SMTP,即时通讯,甚至你的APP使用了JAVA NIO,AIO这样也不在话下。其他的SvnHttpClient,SvnHttpURLConnection,SvnWebView等eSDK提供的控件完全就没有用了,通过TCP隧道,我们可以把真实服务器比如192.168.1.2:80映射到手机的8080端口,然后我们只需修改程序,把程序原来的目标地址从192.168.1.2:80改为127.0.0.1:8080就实现了内网数据走VPN隧道,访问本地的8080端口和访问远程的80端口效果是一模一样的,而且不影响其他的程序工作,尤其是需要接外网的比如地图,消息推送,用户行为统计等功能,而且你可以方便的使用各类网络框架,Retrofit,Okhttp,xmpp,mina等等了。


隧道建立起来之后,就可以通过反向代理的原理,通过Android原生网络库或者原生浏览器访问本地端口达到访问远程内网服务器的功能了,效果如下图,使用手机随便一个浏览器访问127.0.0.1:9090就如同访问远程的80端口



对于Android端我直接在华为官方Demo上添加了开启隧道的功能页面,SvnSocket实现TCP的隧道的方法和下载Demo可以看我上一篇博客《华为AnyOffice eSDK建立TCP端口转发隧道


对于iOS端我只写了建立隧道的Objc代码,可以到《Objective-C (iOS)实现TCP反向代理(Port forward隧道)》查看如何在iOS端建立隧道



 



查看评论

AnyOffice android_sdk_vpn集成整理

AnyOffice android_sdk_vpn集成指南集成背景移动办公app(kdweibo)从安全角度出发,需要集成Huawei Anyoffice SDK到android app中,传说可以代...
  • shengfuqiang
  • shengfuqiang
  • 2017-06-19 00:19:06
  • 1128

OKhttp讲解及各种协议

OKHTTP: 1.为什么要使用okhttp? 使用范围 OkHttp支持Android 2.3及其以上版本。 对于java JDK1.7以上。 官方英文网站 https...
  • wyj1369
  • wyj1369
  • 2017-10-13 16:59:03
  • 242

[案例]更高效,更安全,北京高法开启“掌上法院”新时代

“以前,给全院干警发一个通知至少需要一个小时,现在只需一分钟就可以完成,并能达到全程跟踪、自动提醒,相关人员还能及时查看信息的接收、反馈情况。同时大家只要有闲暇时间,就可以用手机查看新的简报信息、公告...
  • huawei_eSDK
  • huawei_eSDK
  • 2016-01-26 14:41:57
  • 9927

Infection Monkey:数据中心边界及内部服务器安全检测工具

Infection Monkey是一款由以色列安全公司GuardiCore在2016黑帽大会上发布的数据中心安全检测工具,其主要用于数据中心边界及内部服务器安全性的自动化检测。该工具在架构上,则分为M...
  • qq_27446553
  • qq_27446553
  • 2016-09-13 13:13:11
  • 408

anyoffice 隧道排错指南

anyoffice 隧道排错指南通常移动端在登录时,初始化esdk后,报错”服务器异常,请稍后在试”,然而却是一次都登录不上.这种问题,属于http访问不通,观察客户端的console报错日志.如果返...
  • shengfuqiang
  • shengfuqiang
  • 2017-08-10 21:39:13
  • 603

eSDK UC极简开发敏捷创新系列之三: Huawei eSDK UC玩法进阶

前言:        小伙伴们看到这个标题是不是有点意外?这么多玩法还不够?竟然还有进阶玩法?这也太凶残了吧。        没错,Huawei eSDK UC为提高用户体验,增加用户粘性,直接集成了...
  • huawei_eSDK
  • huawei_eSDK
  • 2015-06-18 13:26:09
  • 2199

对于网络平安的探究

 摘 要 探索了网络平安的目前状况及新问题由来以及几种主要网络平安技术,提出了实现网络平安的几条办法。   网络平安 计算机网络 防火墙1 网络平安及其目前状况1.1 网络平安的概念  国际标准化组织...
  • monicaxiaoy
  • monicaxiaoy
  • 2009-11-05 20:17:00
  • 314

Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器

新建一个single view 工程: 关闭ARC , 在.xib视图文件上拖放一个UIImageView  两个UIButton ,一个UISlider ,布局如图。   并为他们连线, ...
  • wsq724439564
  • wsq724439564
  • 2013-09-05 17:10:25
  • 1705

eSDK UC极简开发敏捷创新系列之一:Huawei eSDK到底是个啥玩意儿?

开放是创新之源,一直以来,华为全力支持开源。在解决方案层面,华为专注ICT基础设施,坚守边界,与合作伙伴开放合作满足各类不同的企业需求。在客户层面,通过合作伙伴去签约,由华为的合作伙伴提供商业合同和服...
  • huawei_eSDK
  • huawei_eSDK
  • 2015-06-18 11:53:47
  • 8110

eSDK 华为ICT能力开放平台

【摘要】华为eSDK面向行业市场合作伙伴提供二次开发平台,能够在华为产品基础上为各行业ISV提供统一的开放平台用于构建差异化解决方案,提升市场竞争力。 【关键词】ecosystem-eSDK 开放...
  • eSDK_IT
  • eSDK_IT
  • 2014-11-08 18:41:26
  • 822
    个人资料
    持之以恒
    等级:
    访问量: 63万+
    积分: 6541
    排名: 4575
    文章分类
    最新评论