关于代理两三事

关于代理两三事

前言

在某些『 特定 』的场景下,我们外网的访问会受到限制。

如果有一些特殊的访问需求的话,就需要一个『 代理 』作为中转的服务器。

场景
  1. 平时能正常爬虫的网站,突然无法爬取,可能是 ip 被封,此网站可能会对 ip 进行解析。
  2. 一些未被 GFW 屏蔽的网站由于国内的网络连接时不稳定,需要使用国外代理稳定快速连接
解决

在服务器中开启代理服务器,让程序使用服务器网络进行数据爬取。

目录

Socks代理

它通过 Tcp 连接把目标主机和客户端连接在一起,并转发所有流量。

Socks 代理在任何情况下都不会中断 server 与 client 之间的数据

这是由这种协议的特性,非明文,但是在 Socks 代理服务器还是能还原 TCP 和 UDP流量

大多数浏览器是支持 Socks5 代理,浏览器上网的时候需要与目标主机建立 TCP 连接

这个时候浏览器会告诉 Socks5 代理,它想与目标主机进行通讯

然后 Socks 代理就会转发浏览器的数据,并向主机发出请求,然后再把返回的数据转发回来

shadowsocks 题外话

shadowsocks 有 server 端和 client 端,这两个都用来转发数据的,由于所处位置不同,功能也不同

client 即是本地运行的程序,监听 1080 端口,并把数据转发到远在他乡的 Socks 服务器

由于这种转发是『 加密 』的,是在会话层,所以 GFW 过滤的难度很大

server 那边收到数据后,会原原本本的把数据再向目标请求,收到反馈后再返回给 client 1080 端口

这样一条 tcp 连接就这样建立起来了

Http 代理

Http 代理跟上面的原理相似,用处也基本相同。

它与 Socks 代理不同的是, Http 代理可以中断连接 ( 即在中间截断数据流 )

因为 Http 代理是以 Http 请求为基础的,而这些请求大多以明文形式存在

所以 Http 代理可以在 Client 和下游服务器中间窃听,修改数据

同时 Http 代理也能缓存请求的资源,提升访问速度

GFW

很久很久以前,我们访问网站都是简单而直接的

用户通过互联网请求服务提供方,用户提供方直接将信息反馈给用户

后来,『 GFW 』就出现了,他像一个收过路费的强盗夹在了用户和服务之间 ( Http 请求可以在中间截断数据流 )

每当用户需要获取信息,都经过了 GFW , GFW 将它不喜欢的内容统统都过滤掉

当用户触发到 GFW 的过滤规则的时候,就会收到 Connection Reset 这样的响应

Tinyproxy

Tinyproxy 是一款轻量级的 http(s) 代理工具。

这只是一个透明代理,本身不具备任何传输安全性。

安装

以 Centos 为例

yum -y install tinyproxy

修改配置文件

/etc/tinyproxy/tinyproxy.conf

1
2
3
4
5
......
# 8888 是默认端口
Port 8888
# 设置允许连接的ip和网段,如果注释掉,则允许所有连接
Allow 127.0.0.1

防火墙开放 (默认端口:8888 或自定义的端口 )

1
2
3
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload

重启服务

1
service tinyproxy restart

测试连接

1
curl -x <ip>:<port> www.baidu.com

其中 ip 和 port 是代理服务器的 ip 和端口,如果出现百度源码则证明配置成功

国情使然

tinyproxy

privoxy

该款用处:将 Http 代理桥接为 Socks5 代理

由于我的 VPS 装的是 centos 6,在安装 privoxy 时遇到了坑,在此记录下安装方法

就不对 privoxy 做过多介绍了,也是一款 Http 代理

Centos 6 安装 privoxy

1
2
3
4
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
yum install privoxy
service privoxy start

执行:rpm -Uvh epel-release-6-8.noarch.rpm

提示:package epel-release-6-8.noarch is already installed

执行: yum remove epel-release 卸载重新安装即可。

感谢您的阅读,本文由 Double-c 版权所有。如若转载,请注明出处:Double-c(https://double-c.github.io/2019/04/23/http-proxy/
php设计模式范例
太用力的人跑不远