Mac终端使用代理

由于OS X 10.11之后有SIP安全机制,已经不能够用一条简单的命令来解决,需要关闭SIP或者使用proxychains-ng之类的工具。但是呢,关闭SIP麻烦就算了,居然还有安全问题,像我这种渣渣,真的有点怕把自己给坑了。而privoxy这个软件刚好安装在/usr/local内,就不需要关闭SIP。

privoxy是一个HTTP协议过滤代理,它可以过滤网页,管理cookies,控制访问,除广告等,同时还支持单系统多用户网络。所以我们可以使用privoxy将shadowsocks的socks5代理转为http代理,这样就可以供终端使用了。

搭建梯子

安装并设置shadowsocks

根据之前的账号密码(搭建ss服务器时设置的)设置ss客户端。
ss的默认端口是1080,可以通过命令查看:

1
cat ~/.ShadowsocksX/gfwlist.js | grep proxy

其中,proxy对应的socks5代理

安装privoxy

1
brew install privoxy

配置privoxy

1
vim /usr/local/etc/privoxy/config

在文件末尾输入:

1
2
listen-address 0.0.0.0:8118
forward-socks5 / localhost:1080 . # 转发socks5协议

第一行是privoxy监听任意IP地址的8118端口,也就是privoxy的默认端口。第二行是ss的默认端口,最后还带有一个空格和句号,也就实现了将socks5代理转为http代理,在爬虫中如果设置代理就可以使用http://127.0.0.1:8118

启动privoxy

1
sudo /usr/local/sbin/privoxy /usr/local/etc/privoxy/config

查看privoxy进程

1
ps -ef | grep privoxy

返回以下内容说明启动成功:

1
502  4093     1   0 11:48上午 ??         0:00.03 privoxy

关闭privoxy进程的话,直接使用kill ID(比如这里的ID是4093);以后再启动,需要先进入到/usr/local/etc/privoxy,不然可能会报找不到配置文件的错误。

查看端口监听是否成功

1
netstat -an | grep 8118

测试shadowsocks

1
2
telnet 127.0.0.1 1086
telnet 127.0.0.1 8118

使用privoxy

~/.zshrc中添加开关函数,也可以使用别名命令。
例如:

1
alias proxy='export all_proxy=socks5://127.0.0.1:1080'

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
function proxy_off(){
unset http_proxy
unset https_proxy
echo -e "已关闭代理"
}

function proxy_on() {
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
export http_proxy="http://127.0.0.1:8118"
export https_proxy=$http_proxy
echo -e "已开启代理"
}

使配置立即生效

1
source ~/.zshrc

开启代理

要确保privoxy已经开启

1
proxy_on

可以使用以下命令查看IP:

1
curl ip.cn

关闭代理

1
proxy_off

参考文章:

Mac命令行终端下使用shadowsocks翻墙
命令行下使用代理
Mac OSX终端走shadowsocks代理