adslproxy 代理池原理:
本文采用 redis 做代理IP的存储。存储代理IP前,先使用 adslproxy 做重新拨号和代理IP可用性校验,可用后再保存到 redis 里。在进行重新拨号前,先删除这个原来保存的代理 IP,然后再重新进行拨号操作。
然后使用的 adslproxy 搭建一个提取代理 IP 的工具,通过一个 web 接口给客户端使用的时候。客户端用的时候,直接读取这个 web 接口就可以使用代理 IP。
拨号服务器操作步骤如下:
- 停止拨号的命令:
pppoe-stop
- 开始拨号的命令:
pppoe-start
所以连起来重新拨号更换IP就是pppoe-stop;pppoe-start
1. 安装squid 和python3
2. 记录hosts
记录 hosts 的作用是,进行重新拨号更换IP的时候,可以更快的让squid 完成绑定网口。不然每次更换IP,squid都需要对主机名进行 DNS 查询,会比较慢。不然会在/var/log/squid/cache.log
会出现如下信息:
又或者按照提示,在 squid 的配置文件里面设置 visible_hostname
。
3. 备份 squid.conf 文件
4. 设置代理的用户名和密码
squid 服务中设置代理的用户名密码可以用 htpasswd
命令来生成。该命令可以通过执行 apt-get/yum install http-tools
来获取。
创建用户‘proxy_username’ 的命令如下:
输入相应的密码后,生成 文件 /etc/squid/passwd
squid 配置代理的用户名密码会使用basic_ncsa_auth
这个 lib 文件,一般会自带,因此需要正确的路径。 文件地址是 : /usr/lib64/squid/basic_ncsa_auth
5. 配置 squid 的文件
6. 启动 squid 的开机默认启动
7. 安装 adslproxy
8. 修改源代码
在目前的v3.0.3版本的adslproxy代码中,发现两次地方有点问题,因此手动修改源代码:
(1) 修改 sender.py 的 extract_ip 方法
由于在 sender.py 中的 run() 里面如果subprocess.getstatusoutput(DIAL_BASH)
执行重新拨号的命令提前结束,就会陷入无限拨号的问题。比如subprocess.getstatusoutput(DIAL_BASH)
执行完了,拨号还没成功,还没获取到IP地址,需要等个10秒才获取到IP地址。此时提前进入self.extract_ip()
获取IP,就会获取不到,ip 这个变量为空,进入 else 语句,马上重新执行 self.run() 重新拨号。。
所以需要修改 extract_ip 方法。修改如下文件:
/usr/local/lib/python3.6/site-packages/adslproxy/sender/sender.py
在DIAL_CYCLE
设置的时间是600秒进行一次重新拨号,实际是1200秒才进行重新拨号。如下代码所示:
在代码中看到的逻辑是 self.run() 里的self.set_proxy(proxy)
写入完代理后,进行一次time.sleep(DIAL_CYCLE)
,然后 self.run()
执行完后又time.sleep(DIAL_CYCLE)
了一次。所以需要去掉if self.test_proxy(proxy):
里的time.sleep(DIAL_CYCLE)
。
9. 创建运行脚本
新建 /data/adslproxy.sh 执行文件
设置的变量作用如下:
- REDIS_HOST:保存到
redis
服务的 host 域名或者IP地址。 - REDIS_PORT:保存到
redis
服务端口号。 - REDIS_PASSWORD:保存到
redis
的服务密码 - DIAL_BASH:是拨号云服务器的重新拨号的命令,这里是
pppoe-stop;pppoe-start
。 - DIAL_IFNAME:是拨号云服务器上网卡名称,这里是
ppp0
网卡。 - DIAL_CYCLE:是重新拨号的等待时间,单位为秒。
- CLIENT_NAME:是设置到
redis
代理池里面的名字。 - PROXY_PORT:用来测试代理可用性的代理服务端口号。
- PROXY_USERNAME:设置代理的用户名。
- PROXY_PASSWORD:设置代理的密码。
10. 启动 adslproxy,并设置开机启动
拨号服务器端搭建完成。
服务端操作步骤如下:
服务端通过 Docker 的形式去搭建这个 web 服务。
- Dockerfile 内容如下:
- 构建镜像:
- 通过 docker-compose 文件启动这个镜像:
docker-compose.yaml
文件内容如下:
- 启动后,可以通过
http://IP:8425
这个接口去使用这个代理
比如我的IP是192.168.1.240
,就可以访问 http://192.168.1.240:8425/
去使用这个接口工具
通过http://IP:8425/random
就可以随机获取一个代理,在代理里直接使用即可。
作者:admin 创建时间:2024-05-23 21:41
最后编辑:admin 更新时间:2024-05-23 22:01