使用动态ADSL拨号的VPS服务器搭建稳定IP代理池

一、环境介绍

VPS服务器:云立方
操作系统:CenterOS 7.1
HTTP代理服务器:TinyProxy

二、介绍

  • 什么是ADSL,我们为什么要使用ADSL拨号的VPS服务器来搭建IP代理池?

ADSL属于DSL技术的一种,全称Asymmetric Digital Subscriber Line( 非对称数字用户线路),亦可称作非对称数字用户环路。 是一种新的数据传输方式。 ADSL技术提供的上行和下行带宽不对称,因此称为非对称数字用户线路。

平常我们看到的VPS或云服务器,它的IP地址通常是固定不变的,主要用于建站。而动态IP拨号服务器则主要用于更换IP,也可以在服务器上直接部署业务,比较方便,但不能用于建站,这也是二者最大的区别。

ADSL拨号服务器又叫动态拨号VPS、动态IP VPS或者拨号VPS,主要是相对于平常所见到的固定IP 的VPS服务器而言的。ADSL拨号服务器可以在VPS服务器上实现更换IP的作用,拨一次号换一次IP,从而实现不断更换IP的功能,像在爬虫采集、网络营销、大数据分析、软件挂机、抢票秒杀等多个领域都有广泛运用。

  • 实现思路

三、设置代理服务器

这里我们使用TinyProxy来搭建我们的代理服务器

  • 安装TinyProxy
yum install -y epel-release
yum update -y
yum install -y tinyproxy

如过无法下载,请先进行拨号。不同的服务商的拨号命令可能不同,我这里使用的是pppoe-start

  • 配置TinyProxy
    安装完成之后还需要配置一下TinyProxy才可以用作代理服务器,需要编辑配置文件,它一般的路径是/etc/tinyproxy/tinyproxy.conf
  1. 配置端口号,默认端口号8888
Port 8888
  1. 配置运行连接的主机
    如果想任何主机都可以连接,那就直接将它注释即可,所以在这里我们选择直接注释,也就是任何主机都可以使用这台主机作为代理服务器了。
# Allow 127.0.0.1
  1. 重启服务
service tinyproxy start
  1. 验证代理服务器
    这里我们检测一下我们的代理,我是用的是在线检测代理网站
    image.png

当然,你也可以使用requests库或者直接使用linux的curl的命令

四、整体实现

整体的流程大概如下:


image.png

客户端:

  • 项目结构
    1、 pppoe.sh 拨号脚本,主要是实现重新拨号的几个命令。
    2、 request.sh 请求服务器的脚本,主要是实现拨号后请求服务器的操作。
    3、 request.conf 配置文件。
    4、 request.Log 日志文件

需要注意的是,我们每台VPS服务器都需要搭建代理服务,如果VPS服务器过多的情况下我们可以写一个脚本来自动进行安装配置

  • request.conf
    在这里配置我们脚本的KEY以及服务器地址
KEY=godlei
SERVER=http://45.76.212.133/record

KEY相当于是访问服务器的凭证,如果KEY值不一致将不会不能访问服务器。SERVER是我们服务器的地址,请求该地址时服务器会把客户端的IP记录并保持到Redis数据库

  • pppoe.sh
    我们通过该脚本来进行拨号。不同的VPS拨号服务器的提供商的拨号命令不一样,我这里的是通过pppoe-start来进行拨号
# 配置该shell的目录的环境变量
PATH=$PATH:/client/
export PATH

#拨号命令
pppoe-stop
pppoe-start
pppoe-status

记得在前两行配置一下环境变量,配置上拨号命令所在的目录,以防出现脚本无法运行的问题。

  • request.sh
    我们通过该shell来进行配置文件的读取,拨号脚本的调用、向服务器发送请求
#!/bin/bash


# 检查执行脚本时是否传入参数
if [ "$#" != 1 ];then
    echo "param error;请传入您配置文件的路径."
    exit 0
fi

KEY=""
SERVER=""
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# 读取配置文件信息
load_config() {
    cfg=$1;
    content=`cat ${cfg}`;
    KEY=`echo "${content}" |grep 'KEY'| sed 's/^KEY=[\"]\(.*\)[\"]/\1/'`;
    SERVER=`echo "${content}" |grep 'SERVER'| sed 's/^SERVER=[\"]\(.*\)[\"]/\1/'`;
    KEY=${KEY:4}
    SERVER=${SERVER:7}
}

# 重新拨号
change_proxy() {
    . $DIR/pppoe.sh
}

# 发送请求
send_request() {
    echo $SERVER/$KEY;
    curl $SERVER/$KEY;
}


main() {
    load_config $1
    change_proxy
    send_request
}

main $1
  • 定时调度以及日志记录
    这里我们通过crontab来实现定时任务的调度
# 设置定时任务
crontab -e

# 输入crontab的实例命令,每两分钟执行一次.注意这种的写法最小间隔是分钟
*/2 * * * * /client/request.sh /client/request.conf >> /client/request.log

最前面的*/2是2分钟执行一次,后面接着的是你需要执行的shell路径以及该shell执行所需的参数,最后则是输出成一个日志进行记录
如果你有按秒执行的需求,可以参考这里 centos 定时任务按秒执行crontab

服务端

代理IP存储在服务端的Redis数据库,所以我们需要在我们的服务器上面安装Redis数据库

# 安装
yum install redis

# 开启服务
systemctl start redis

  • 项目结构


    image.png

1、config.py 配置文件
2、db.py 数据库文件
3、main.py Flask主程序,提供两个接口,一个是接收客户端请求,然后将IP保存,另外一个是获取当前保存的IP

  • config.py配置文件
    1、KEY 是客户端请求服务器时的凭证,在client的request.conf也有相同的配置,二者保持一致即可。
    2、NEED_AUTH 在获取当前保存的IP(即代理的IP)的时候,为防止自己的主机代理被滥用,在获取IP的时候,需要加权限验证。
    3、AUTH_USER和AUTH_PASSWORD分别是认证用户名密码。
    4、PORT默认端口,返回保存的结果中会自动添加这个端口,组成一个IP:PORT的代理形式。

注意默认是8888,你需要用Squid或者TinyProxy配置下代理,端口是8888,这里端口8888即默认的拨号VPS的代理端口,这里配置下保证输出结果自动拼接端口。

5、Redis相关的配置
6、TEST_URL:验证代理是否可用的网址;TEST_CYCLE:验证代理的时间间隔

  • db.py数据库文件
    定义了一个Redis的类,实现了一些Redis操作的方法

  • main.py主程序
    Flask的主程序,实现了接受客户端的请求以及API接口的提供

五、代码

已上传至我的GitHub

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容