linux代理的使用

2018/07/24

前言

最近要下载一个在youtube上的数据库,用来训练神经网络。走国内通道下载比较慢。于是,我使用了vps代理方式下载,速度取决于你的机器连接vps的网速。本文的主要内容有,实现shadowsocks 代理 ,tsocks 代理工具使用,可组合使用的一些下载工具如wget 和axel等。

# 举个栗子
$ tsocks wget -c https://www.dropbox.com/s/minpyv59crdifk9/datasets.zip

嗯嗯,这个速度还不错!

声明:本文以科学研究为目的,请勿滥用。

1 Shadowsocks

Shadowsocks是一个轻量级socks5代理工具。在linux平台,我们可使用 python 提供的包管理工具 pip 安装 Shadowsocks ,如下。

# pip 安装 Shadowsocks
$ pip install shadowsocks

# 或者
$ pip install git+https://github.com/shadowsocks/shadowsocks.git@master

pip安装完之后,可能要重启终端,我们就有ssserver和sslocal小工具了。下面配置server或者client。一般,server配置在国外的vps上,client配置在本地国内机器上。

PS:其他平台安装 参考 shadowsocks官方 install

1.1 配置 Shadowsocks server

按下面的三步走,即可。

{
    "server":"0.0.0.0",
    "server_port":443,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"密码",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

说一点: 由于我们的下载任务是临时的,开个screen(终端复用工具)放在后台。当然你也可以设置为开机自启动,这里不再赘述。

1.2 配置 Shadowsocks client

{
        "server":"服务器ip或域名",
        "server_port":443,
        "local_address":"127.0.0.1",
        "local_port":1280,
        "password":"密码",
        "timeout":300,
        "method":"aes-256-cfb",
        "fast_open":false,
        "workers":1
}

说一点:推荐使用screen方式放在后台。当然也可以使用-d 参数放在后台运行。 sslocal -c client_shadowsocks.json -d start

2 tsocks

有些linux工具可能没有proxy的代理功能,或者不支持sock5代理,而用tsocks可以很好的解决这些问题。tsocks 是个终端代理工具,可以直接连接shadowsocks提供socks 5代理端口,有点类似于proxychains。

下面简单介绍下安装与使用:

local = 192.168.1.0/255.255.255.0
server = 127.0.0.1
server_type = 5
server_port = 1080

3 Demo:代理使用

3.1 使用 tsocks

在所需代理的命令前加个tsocks就行,如: tsocks wget -c xxxx,tsocks axel -n 10 -av xxxx,tsocks curl xxx

3.2 使用 youtube-dl

youtube-dl是批量下载youtube视频的好工具。youtube-dl 可以指定 proxy,可以不使用tsocks

pip install --upgrade youtube-dl

youtube-dl 中待解决的问题? 想只下载一个视频中的一部分,不用下载整个视频,太费vps流量了。暂未找到解决办法,我找到的一个跟问题很相似的issue,有朋友会整的,望告诉一下。is it possible to download only desired time interval?

3.3 使用 axel

axel多线程下载。

tsocks axel -n 3 -a https://www.dropbox.com/s/minpyv59crdifk9/datasets.zip
-n 3 : 3个线程下载
-a   : 有个进度条

其他方式:下载脚本 axel-bash.sh

#!/bin/sh -e  
# usage:  ./axel-batch.sh the-download-url.list  
cat $1 | while read LINE  
do  
	if [ -n "$LINE" ]; then  
	axel -n 3 -a `echo $LINE`  
	fi  
done