搭建Socks5代理

最近在做3D模型下载时发现本地可以运行的代码放到服务器就跑不动了,抓包发现是服务器端无法访问三方接口,所以想到使用代理访问,同时记录下整个代理搭建过程。

安装

  • 下载: http://sourceforge.net/projects/ss5/files/
    1
    2
    3
    4
    5
    tar zxvf ss5-3.8.9-8.tar.gz
    cd ss5-3.8.9-8
    ./configure //默认是1080端口,如果想改端口的话,./configure --with-defaultport=10900
    make
    make install

默认安装目录在:/etc/opt/ss5

若出现报错:

configure: error: * Some of the headers weren’t found *

则 需要安装:

1
yum -y install pam-devel

如果出现报错:

SS5OpenLdap.c:29:18: fatal error: ldap.h: No such file or directory

安装

1
yum -y install openldap-devel
  • 修改配置

/etc/opt/ss5/ss5.conf内容全部删除,仅添加内容:

1
2
auth 0.0.0.0/0 - u
permit u 0.0.0.0/0 - 0.0.0.0/0 - - - - -
  • 添加账户

/etc/opt/ss5/ss5.passwd中添加用户名与密码:

1
ss5 pass
  • 启动socks5

默认情况ss5文件没有执行权限,如果觉得使用sh来启动麻烦,那么按如下方法:

1
2
3
4
chmod u+x /etc/rc.d/init.d/ss5
chkconfig --add ss5 //可选
chkconfig ss5 on //可选
service ss5 start

注意:如果你服务器开了防火墙不要忘了关掉,或者iptables里做下策略

使用

通用规则: curl -x [schema]://[user]:[pass]@[host]:[post] [URI] (-v 查询执行过程)

  • crul 版本 >= 7.21.7 时使用命令:
1
curl -x socks5h://localhost:10800 http://www.google.com/
  • crul 版本 >= 7.18.0 时使用命令:
1
curl --socks5-hostname localhost:10800 http://www.google.com/

许多工具在内部使用libcurl,或者在安装程序脚本中使用curl命令。如果很难修改命令行本身,可以使用环境变量设置代理。

1
env ALL_PROXY=socks5h://localhost:10800 PROGRAM [OPTION]...

如果你想覆盖系统代理设置,你可能还需要设置两个额外的变量:

1
env http_proxy=socks5h://localhost:10800 HTTPS_PROXY=socks5h://localhost:10800 ALL_PROXY=socks5h://localhost:10800 PROGRAM [OPTION]...

注意: http_proxy写的,其他两个是写的。

在代码中使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function http_post($sUrl, $aData, $aHeader = null, $proxy = false)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $sUrl);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
if ($proxy) {
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // Sockes5代理
curl_setopt($ch, CURLOPT_PROXY, HOST); // HOST:代理服务器
curl_setopt($ch, CURLOPT_PROXYPORT, PORT); // PORT: 代理端口
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'USER:PASS'); // USER: 账号 PASS:密码 (注意账号密码之间有一个 ':' )
}
!is_null($aHeader) && curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $aData);
$sResult = curl_exec($ch);
if ($sError = curl_error($ch)) {
response(curl_errno($ch), $sError);
}
curl_close($ch);
return $sResult;
}
关注作者公众号,获取更多资源!
赏作者一杯咖啡~