linux代理的使用

前言

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

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

嗯嗯,这个速度还不错!

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

1 Shadowsocks

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

1
2
3
4
5
# 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

按下面的三步走,即可。

  • 通过ssh连接到(Virtual Private Server)vps上,或者本地打开终端。

  • 新建一个server_shadowsocks.json文件,内容如下:

1
2
3
4
5
6
7
8
9
10
{
"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
}
  • 执行ssserver -c server_shadowsocks.json

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

1.2 配置 Shadowsocks client

  • 通过ssh连接到机器上,或者本地打开终端。

  • 新建文件 client_shadowsocks.json

1
2
3
4
5
6
7
8
9
10
11
{
"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
}
  • 执行sslocal -c client_shadowsocks.json

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

2 tsocks

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

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

  • 安装tsocks
    • linux安装tsocks 命令:apt install tsocks
    • mac 安装参考 homebrew-tsocks
  • 开启上面Shadowsocks的client放在后台。
  • 修改tsocks 配置文件,在 /etc/tsocks.conf 文件的最后添加:
1
2
3
4
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

  • 安装youtube-dl
1
pip install --upgrade youtube-dl
  • 使用举个例子

    • 下载youtube视频
    1
    2
    3
    URL=https://www.youtube.com/playlist?list=PLLbeS1kM6teJqdFzw1ICHfa4a1y0hg8Ax
    ./youtube-dl --proxy socks5://127.0.0.1:1280 ${URL}
    # 在 client_shadowsocks.json 的 local_port 设置为1280,这儿也为1280
    • 下载里面的mp3
    1
    youtube-dl -x --audio-format mp3 https://www.youtube.com/watch?v=xpVfcZ0ZcFM

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

3.3 使用 axel

axel多线程下载。

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

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

1
2
3
4
5
6
7
8
#!/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
0%