0%

不同代理用法小结

2021年给自己定下了目标,一个月2篇博客,31号冲刺一下。希望今后能经常总结记录,到时候回头看可以加深自己的记忆,比丢在备忘录里面也好检索一点。而且我没有总结的习惯,真的很不好。

这篇博客主要是简单总结一下之前本科毕设的使用过的各种代理,主要包括功能和使用方法。通常代理分为HTTP代理和SOCKS代理,SOCKS代理分为SOCKS4和SOCKS5,像Tor和Shadowsocks都是SOCKS5代理。

Tor

目前暗网大多都是Tor暗网,不能直接访问,需要通过Tor代理访问。Tor项目提供了Tor浏览器和Tor源码,都是开源的。Tor浏览器就是基于火狐的一个集成浏览器,通常来说Tor浏览器已经能满足基本的用户需求。(还是要翻墙的,不然链路建立不起来)

但是涉及到通过终端或其他方式实现匿名访问资源,或者更灵活的使用Tor代理,基本上就会选择Tor源码。

其实Tor官网的配置说的比较详细,macOS上的配置,但是其实我在学习过程中首先第一获取使用方法的还是博客,因为比较简单明了,本着能用就行的想法,但是也会导致很多问题。

Simple Tor setup on macOS 是一篇在Mac上配置Tor代理的文章,各种利用方法都说的比较清楚,可以根据自己不同需求选择配置方法,但是这里不太推荐通过系统偏好设置来进行配置,太麻烦了。

比较通用的方法是,下载完Tor之后,通过/usr/local/etc/tor/torrc.sample修改配置。

首先将torrc.sample拷贝为torrc。

在末尾添加shadowsocks代理,1086为具体的Shadowsocks的本地socks5监听端口,在高级设置里面查看。

1
Socks5Proxy 127.0.0.1:1086

ProxyChains

macOS中的新版本叫ProxyChains-ng,ProxyChains一个强制应用的 TCP 连接通过代理的工具,通过一个或多个SOCKS/HTTP代理对连接进行重定向。

ProxyChains还是非常好用的,比如说让终端命令行走Shadowsocks代理,让爬虫走Tor代理,除了强制应用走代理之外,因为ProxyChains同时支持SOCKS和HTTP代理的,所以可以实现SOCKS和HTTP代理的转换。

项目的GitHub中关于ProxyChains的介绍和具体使用方法还是非常详细的,在When to use it ?这一节中可以很好的理解它的使用场景,macOS上的安装和配置可以参考proxychains-ng的github

下载完成后在/usr/local/etc/proxychains.conf中配置proxychains,在ProxyList中添加代理,默认是Tor代理,9050是Tor源码的监听端口,终端运行时在命令前加上proxychains4运行即可。

1
2
3
4
5
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
# socks5 127.0.0.1 9050

Polipo

Polipo是一个轻量级、快速、小内存占用的跨平台Web代理,同时实现SOCKS和HTTP的代理,实现一个TCP/IP上的多路复用。通常是用于从SOCKS代理到HTTP代理的转换。

Using tor with Polipo对Tor + Polipo组合很好的介绍

macOS使用polipo

Tor + Polipo 和 Tor + Privoxy是经常被提起的组合, Shadowsocks, Polipo, Proxychains安装及配置中提到Polipo并不能指定某个软件以代理的方式运行,要使用Proxychains来进行强制代理,这种类似的组合在Tor暗网爬虫的一些要点中也有。应该是希望通过Polipo转换Shadowsocks/Tor的Socks5和浏览器/scrapy的HTTP,但是其实Tor + ProxyChains的组合是能够满足需求了,因为ProxyChains本身也可以进行代理之间转换。

Tor与Scrapy实现暗网爬虫

Tor的话,基本上和爬虫结合的比较多,这里主要是一些写的比较好的博客,可以参考参考。
Scrapy 和 Tor Shadowsocks + Tor + privoxy
Tor暗网爬虫的一些要点 Shadowsocks + Tor + Polipo/privoxy + proxychains

但是这里建议尝试Shadowsocks + Tor + proxychains直接实现爬虫,也是可行的。

HAProxy

HAProxy是一个用于负载均衡的代理,它通过ACL制定规则来实现负载均衡。

HAProxy 之 ACL介绍和使用是一篇比较好的关于HAProxy中ACL的配置的文章。

接触HAProxy的原因也比较神奇,在完成暗网爬虫后,发现数据库的连接存在问题,当时咨询了一下大佬(Tor暗网爬虫的一些要点 的博主),推测是当scrapy爬虫的所有连接都被proxychains重定向到Tor后,数据库本地连接出现问题,这里通过使用HAProxy对proxychains的所有流量进行一个二次分流,来实现数据库本地连接和Web资源请求的区分。基本逻辑如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#/etc/haproxy/haproxy.cfg
global
daemon
maxconn 256
defaults
log global
mode tcp
option dontlognull
timeout connect 5000ms
timeout client 10000ms
timeout server 50000ms

frontend ss-in
bind *:9000
acl is_mysql dst_port 3306
use_backend mysqlservers if is_mysql
default_backend ss-out

backend mysqlservers
server dbserver1 127.0.0.1:3306 maxconn 32

backend ss-out
server server1 127.0.0.1:9050 maxconn 32

但是对HAProxy的使用也仅限与此,之后没有再使用这个代理,所以了解的比较有限,它的功能应该还有很多值得挖掘的地方。

小结

这些代理其实是本科毕设的时候实现暗网爬虫涉及到的一些代理,感觉还是非常繁琐的,目前比较遗憾的地方就是没有使用过Privoxy,所以没办法很好的进行一个比较;同时HAProxy这一步是否有必要也是之前一直在思考的一个问题,目前也并没有得出答案。

这篇博客可能存在错误的地方,欢迎大家指正,可能实现暗网爬虫能有更方便的方法,欢迎交流,最后希望能提供一些参考价值。