之前,所有对android源码的分析都是在公司进行的;原因便是公司的网络比较方便,可直接下载源码,相关的学习笔记也能够十分方便的通过git上传至服务端,进行保存。
然而,离开公司的大环境,回到家里,弄到Android的源码,同步pull到最新的学习笔记,便变得寸步难行了;关于网络的问题,前前后后大概也在网上查阅了大概一个月的资料(只能利用周末的时间才处理这件事情),发现网上的资料大部分都比较相似,而且并不是很全面;于是便萌发了自己写一篇博客的打算;一则,是为了记录整个部署流程,方便今后对此问题的复用;二则,也是提供一种思路,分享之。
最后,本人的大脑知识库有限,如有错误,欢迎在评论区指出。
本文的结构如下:1.VPS的获取;2.shadowsocks服务端部署与启动;3.shadowsocks客户端部署与启动;4.代理相关的设置。
一.VPS
vps,虚拟专用服务器(virtual private server),其就像一台真正的物理服务器一样,可在上面分配独立的公网IP地址,安装独立的操作系统,独立的磁盘空间、内存、CPU资源等;通过vps,可以将自己的服务端代码部署在其上面,供客户端访问(关于vps的其他用途,笔者知识水平有限,并未深入琢磨过);而在本篇文章之中,则主要使用了vps能够访问到android源码相关的网站,将其当做了一个网络代理服务器。
当然,与物理服务器相比,vps也有自己的一个不足:当其中一台vps受到攻击或占用大量宽带资源时,同一物理服务器上的其他vps也会受到影响。
上文曾述,本文利用vps的一个主要原因,是vps可以访问到android源码的相关网站;一般而言,这样的vps是特指部署到国外的一些vps。
所以,本文所说的解决方案,其实就是利用相关代理,访问一台国外的vps,有这台vps间接访问,Android源码相关的网站,从而最终获取到android源码。
如下图所示:
二.shadowsocks服务端部署与启动
如上图所示,vps与Android源码服务器之间的通信比较好解决,直接通过http协议即可完成(毕竟vps是国外的);而本地电脑与vps的连接,则通过shadowsocks进行通信连接。shadowsocks,是一款由Python实现的开源软件,与socket有点类似,都分为服务端与客户端。
对于服务端,即vps(此vps的操作系统假定为ubuntu),可以直接安装,具体安装步骤如下:
sudo apt-get update;
sudo apt-get install python-pip;
sudo pip install shadowsocks;
对于第一条命令,笔者建议执行,不然可能会因为版本过低的原因,无法成功安装shadowsocks。
安装成功后,便在vps上运行shadowsocks服务端程序,具体代码如下:
sudo ssserver -p 10000 -k 123456 -m aes-256-cfb start
各个参数的含义如下:
-p:shadowsocks服务端程序的运行端口号,建议在10000以上;本地电脑必须以相同的端口号,才能访问到shadowsocks服务端程序;
-k:shadowsocks服务端程序认可的密码;本地电脑必须以相同的密码,才能访问shadowsocks服务端程序;
-m:传输数据加密的方式;本地电脑也必须指定相同的加密方式;
以上三个参数算是最基本的一个配置参数,对于其他的参数笔者并没进行相关测试,所以不做说明。
另外,网上也有提及利用一个json文本来定义配置参数,对于这种观点,笔者的建议是,服务端尽量使用命令的方式来指定相关参数;客户端可以使用json文件来指定配置参数。
当成功执行完上一条shell命令后,vps上的shadowsocks服务端就完全启动了。
最后需要注意一点的是,在运行ssserver命令的时候,尽量不要使用-d参数,这样ssserver命令就直接在当前终端上运行,其相关的日志也会在当前终端上显示出来,这样也方便查错。
三.shadowsocks客户端的部署与启动
明显的,shadowsocks客户端程序应当运行在本地电脑之上(PC)。
首先,在本地电脑上安装shadowsocks,其安装步骤与在vps上安装shadowsocks的步骤一致。
其次,配置客户端的参数;对于客户端,因为其参数较服务端多,所以采用json文件的方式。
笔者的json文件如下:
{
"server":"vps的ip地址",
"server_port":10000,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"123456",
"timeout":600,
"method":"aes-256-cfb"
}
每个参数的说明如下:
server:shadowsocks服务端程序运行的机器的ip;此处就是vps的IP地址;
server_port:shadowsocks服务端程序运行时,占用的端口号;必须与启动shadowsocks服务端程序时,指定的端口号一致;
local_address:本地电脑的ip地址;下文的代理设置会使用到此IP地址;
local_port:本地电脑代理设置时使用的端口号;下文的代理设置会使用到此端口号;
password:访问shadowsocks服务端程序所需的密码;此属性值必须与启动shadowsocks服务端程序时,指定的密码一致;
timeout:访问shadowsocks服务端程序的超时时间;
method:指定数据传输时的加密方式;此属性值必须与启动shadowsocks服务端程序时,指定的加密方式一致;
完成了客户端的json配置参数文件后,就可以启动shadowsocks客户端程序了,具体的命令如下:
sudo sslocal -c json参数配置文件 start
与启动shadowsocks服务端程序一样,笔者建议不添加-d参数,这样方便日志的查阅。
如果一切顺利,经过上文所述,就可以在本地电脑上成功启动了shadowsocks客户端程序了。
四.相关代理的设置
4.1.全局代理的设置
经过前面两个步骤的成功执行后,本地电脑就能够通过shadowsocks与vps进行连接通信了;但这个时候,本地电脑还不能对android源码网站进行访问;要达到最终的目的,还要经过最后一步的设置。
进入本地电脑的系统设置--->网络--->网络代理--->在方法中选择手动--->在Socks主机ip地址一栏中填写127.0.0.1(也就是启动shadowsocks客户端程序时,指定的local_address参数)--->在Socks主机端口号一栏中填写1080(也就是启动shadowsocks客户端程序时,指定的local_port参数)--->最后点击“应用到整个系统”。如下图所示:
如此,就成功设置了代理;不出意外,打开chromium,便可访问android源码网站了。
4.2.curl或者wget的代理设置
经过4.1的操作后,可以成功访问android源码网站;但是,如果在终端使用repo下载android源码依旧会失败。对于repo使用何种方式下载android源码,笔者并未详细研究过,但是经过笔者测试,只要curl或者wget能够成功访问到android源码相关的网站,那么repo便可以成功下载android源码。
所以,问题转换为使得curl或者wget能够成功访问android源码。
针对curl或者wget访问android源码网站,网上有给出通过export http_proxy=http://代理服务器IP:代理端口号,进行代理设置;但是,笔者亲测,这种方式是不可行的,原因笔者猜想,是因为shadowsocks提供的是一种socks代理,而export http_proxy进行的是一种http代理。
因此,要想在curl或者wget上使用shadowsocks,则还需要进行一种转换;如下图所示:
而将http代理映射到socks代理,则需要一个privoxy程序来实现;具体步骤如下:
sudo apt-get install privoxy
通过上述命令,来安装privoxy。
配置修改
sudo vim /etc/privoxy/config
修改点如下:
找到listen-address 127.0.0.1:8118,去掉此行的注释;
在文件尾部添加:forward-socks5 / 127.0.0.1:1080 .
注意第二处修改的最后部分有一个“.”。
此外,第二处修改的ip地址就是启动shadowsocks客户端程序指定的local_address参数;端口号就是动shadowsocks客户端程序指定的local_port参数。
完成修改后,启动privoxy服务,命令如下:
sudo service privoxy start
在终端配置http和https的代理,命令如下:
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
最后进行结果验证:
curl Android源码相关网站网址