ADSL拨号服务,创建adsl拨号连接
一、准备动态vps的工具:我用的是云立方的动态vps,0.5G内存,11G硬盘,20G宽带,一年1800元。动态vps主要运行代理服务,消耗大量带宽,通过拨号改变IP,达到动态代理的效果。固定IP服务器:阿里云服务器,1G内存1核,40G云盘,一年836元。服务器主要实时获取动态vps的IP,并对外提供接口。这些服务不会消耗太多资源,服务器也可以用来运行爬虫或者建立网站。第二,环境构建动态vps功能:构建代理服务,通过在vps上拨号切换IP,将切换后的IP转移到固定IP的服务器上。工具:代理服务-tinyproxy,发送IP-python的请求库系统:云立方的系统可以预装,我选择的是CentOS7.1系统,在管理后台运行。连接服务器:ssh user@ip -p port拨号操作:断网:ADSL-停止,拨号:ADSL-开始检查公网ip:curl icanhazip.com加代理检查IP:curl-x IP:port -v icanhazip.com判断IP是否有变化:先检查公网IP,然后断网,再拨号,然后检查公网IP。如果没有发现变化,可以试几次。在重放之后,公共IP有可能保持不变。1.代理服务安装程序:tinyproxy安装命令:
#添加EPEL仓库,然后更新yum来源:sudo yum安装epel-release sudo yum更新#安装sudo yum安装-y tinyproxy修改配置:
vim/etc/tiny proxy/tiny proxy . conf修改端口Port,默认为8888port888。注释掉Allow 127.0.0.1,表示允许所有人访问代理启动服务:service tinyproxy start。
log:/var/log/tiny proxy/tiny proxy . log
本地测试:curl-x IP:port -v icanhazip.com
注意坑:
我开始用芝麻vps。过了这一步,我就可以在VPS上用局域网IP通过代理服务器访问了,但是不能通过公网IP本地访问。最后发现是因为外网无法访问服务器,尝试打开端口,无果。云立方可以通过公共IP直接使用代理。
安装yum时,会报告一个错误:yum没有足够的缓存数据来继续。解决方案:
将/etc/yum.repos.d/epel.repo中的mirrorlist更改为baseurl/etc/resolv.conf文件,并添加名称server 144.144.144.144。重播断开时,有时adsl-start会失败,报错:“/usr/s Lengao drawing board/ADSL-start:line 217:5749 terminated c o n e c t quot;连接quot连接 @ /dev/null 21 ",最后发现连接可能断开不干净。如果多次执行adsl-stop,就会成功执行adsl-start。
在代理服务tinyproxy的操作过程中,报告了此错误:waiting servers (0)小于minspareservers (5)。创建新的孩子。原因是已达到最大连接数,无法创建新的连接处理请求,因此代理服务挂起。只需重新启动代理服务。解决办法
定期重启tinyproxy服务,修改配置vim/etc/tiny proxy/tiny proxy . conf max clients 100-500 #最大连接数超时600-20 #超时2、构建Python环境(1)安装Python
Python依赖性
Sudyum安装yum-utils sud yum-build dep Python Python源代码连接:https://www.python.org/ftp/python/
Curl-o https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz我用curl的时候下载不了。我可以从官网下载指定版本的Python,然后传到服务器上。
tarxf Python-3 . 5 . 0 . tgz CD Python-3 . 5 . 0。/ConfigureMakeSudo安装完成后,通过Python 3-V检查当前版本。
(2)安装虚拟环境。
CD ~ MKDIR Venvcd venvpython 3-M Venv python 3-for Crawl source ~/Venv/Python 3-for Crawl/Lengao的画板/activate (3)安装相应的Python库
Piprequests #安装从其他环境导出的库pip install -r requirements.txt阿里云服务器:功能:接受动态VPS发送的ip,提供返回动态VPS的接口。实时IP端口工具:web service -tornado连接:ssh root@ip -p 22,如果忘记了服务器密码,可以重置实例登录密码和远程连接密码:More-passwords,秘钥构建Python环境如上,安装tornado pip安装tornado redis数据库sudo yum install -y redis#启动服务redis-server /dev/null 21 #连接redis-cli mongo数据库(可以不安装,不需要这个库实现基本的代理功能。)在# yum里没有mongo的下载源。需要手动添加VI/etc/yum . repos . d/MongoDB-org-3.4 . repo #并写入以下信息,对于CentOS 7[MongoDB-org-3.4]name=MongoDB repository base URL=3359repo.mongoDB.org/yum/red hat/7/MongoDB-org/3.4/x86 _ 64/gp check=1 enabled=1 gpg key=3359www.mongodb.org/static/PGP/server-3.4.asc # install sudo yum install-y MongoDB-org start:system CTL start mongod . service注意坑:
当ssh被链接时,报告错误Permission Denied (public key,GSSAPI-keyex,GSSAPI-with-mic)。解决方法:通过阿里云web终端登录服务器,修改ssh配置文件。
vim /etc/ssh/sshd_config
更改:密码验证号(默认为是)
或者打开评论:PermitRootLogin yes代码实现逻辑1。客户端:动态vps
通过Python,断开连接,拨号。成功后,通过匹配获得公有IP,通过requests库将IP发送给服务器。为了避免恶意干扰,可以添加传输密钥,服务器会对传输密钥进行验证。如果验证失败,您可以更改IP,而无需为IP更新设置固定任务。传输的数据包括IP、密钥和名称(区分vps服务器)。2.服务器:固定IP服务器。
用tornado启动服务,并提供两个接口。
Post接口:接收客户端发送的IP,密钥验证成功后,以name为key,以ipport为val,存储在redis接口:将ipport从redis中取出,返回给代理检测程序;它可以用来检测IP的可用性,并消除无效的IP。
总结相比直接购买代理商,价格更便宜,速度不限。但缺点是在vps拨入,传输到服务器,再由爬虫使用代理的过程中存在延迟,可能导致IP切换时代理不可用。解决方法是设置超时,休眠几秒再重试,不适合要求IP交换速度快的业务。拨号太频繁。一个是IP有时候不变。又一个简单的拨号失败。如果是在线环境下使用,可以多买几个动态vps,做一个IP池代码实现。参见:https://github.com/HLFYY/spiders/tree/master/adsl_server