什么是网络代理?
顾名思义,网络代理就是指定网络的出口,让指定的流量走指定的代理服务器。
代理服务器分类?
常见的网络代理有:HTTP代理,socks代理,vpn代理,反向代理,ftp代理,pop3代理等等
我们挑选最常见的两种协议来说:
http协议
针对http协议和https协议的代理,用来代理http协议的访问
一些搭建http代理的软件:
- privoxy : https://www.privoxy.org/, 最新版本为3.0.26
- cow : https://github.com/cyfdecyf/cow
socks协议
socks代理:针对会话层的代理,是一个偏底层的协议,它只关注链接,不关注上面是什么应用 socks协议有socks4和socks5两个版本,区别在于socks4只支持TCP,而socks5同时支持TCP和UDP
- 协议介绍:https://juejin.im/entry/5999ad616fb9a0247321824a
- 基于GO的socks5代理实现:https://www.jianshu.com/p/172810a70fad
- 基于ssh的socks5代理:
ssh -NTfD 127.0.0.1:7070 test@11.22.33.44参考ssh端口转发 - 大家最常用到的shadowsocks在本地监听的就是socks代理 127.0.0.1:1080
代理的用途
- 共享网络,适用于没有外网ip的机器
- 代理加速,通过专门的网络进行网络访问的加速
- 隐藏身份,防止攻击,隐藏了自己真实的ip地址,所以可以防止一定程度上的攻击
- 用户管理,用来做一些审计的功能
常用软件的代理设置
curl
curl命令同时支持http代理和socks代理
直接用命令参数的方式 curl --proxy 'http://10.10.10.10:8118' http://www.baidu.com
利用.curlrc来设置,这样就不用每次都加上这个参数了
$ cat ~/.curlrc
socks5 = '10.10.10.10:1080'
wget
额外知识点:wget -c 参数可以启用断点续传的功能 -Y, –proxy=on/off 临时打开或关闭代理,不用每次修改rc文件了
wget 只支持http协议代理,不支持socks协议代理
直接用命令参数的方式 wget -e'http_proxy=http://10.10.10.10:8118' http://resoure.com/xxx.tgz
利用.wgetrc来设置,这样就不用每次都加上这个参数了
$ cat ~/.wgetrc
http_proxy = http://10.10.10.10:8118
https_proxy = http://10.10.10.10:8118
use_proxy = on/off # 启用或者不启用代理
可以看到是通过环境变量的方式传递进去的,所以可以通过bash的环境变量来加载
$ cat ~/.bashrc
# 不需要认证的情况
export http_proxy=http://10.10.10.10:8118
export https_proxy=http://10.10.10.10:8118
# 需要认证的情况
export http_proxy=http://username:password@http://10.10.10.10:8118
brew
brew底层使用的是curl获取包,因此只需要设置.curlrc就行了
yum
支持http代理,socks5代理没有测试
用centos的管理员肯定不陌生,但是有些包因为众所周知的原因下载不下来,需要挂代理。怎么设置呢?
$ cat /etc/yum.conf
# 在该文件中新加下面的配置项
proxy=http://10.10.10.10:8118
# 代理需要用户名密码,就按照如下设置
proxy_username=test
proxy_password=test
git
支持http代理,socks5代理没有测试
通过命令来配置 git config –global http.proxy 'http://10.10.10.10:8118'
通过环境变量 export http_proxy=http://10.10.10.10:8118
当然也可以写到.bashrc里面
go get
go get 命令底层用的git,所以只要跟git一样就行了