什么是ADSL?

  • ADSL (Asymmetric Digital Subscriber Line ,非对称数字用户环路)是一种新的数据传输方式。它因为上行和下行带宽不对称,因此称为非对称数字用户线环路。它采用频分复用技术把普通的电话线分成了电话、上行和下行三个相对独立的信道,从而避免了相互之间的干扰。

    他有个独有的特点,每拨一次号,就获取一个新的IP。也就是它的IP是不固定的,不过既然是拨号上网嘛,速度也是有保障的,用它搭建一个代理,那既能保证可用,又能自由控制拨号切换。

    如果你是用的ADSL上网方式,那就不用过多设置了,直接自己电脑调用一个拨号命令就好了,自动换IP,分分钟解决封IP的事。

    然而,你可能说?我家宽带啊,我连得公司无线啊,我蹭的网上的啊!那咋办?

    这时,你就需要一台VPS拨号主机。

    购买服务器

    某度广告做的那么好是吧?一搜一片,这点谷歌可是远远比不上啊。

    于是乎,我就搜了搜,键入:拨号服务器,有什么骑士互联啊、无极网络啊、挂机宝啊等等的。我选了个价钱还凑合的,选了个无极网络(这里不是在打广告),80一个月的配置,一天两块钱多点。

    2核、512M内存,10M带宽。

    下面是链接:

    无极网络拨号VPS

    大家觉得有更便宜的更好用请告诉我呀!

    接下来开始装操作系统,进入后台,有一个自助装系统的页面。

    我装的CentOS的,在后面设置代理啊,定时任务啊,远程SSH管理啊之类的比较方便。如果你想用Windows,能配置好代理那也没问题。

    有的小伙伴可能会问了,既然它的IP是拨号变化的,你咋用SSH连?其实服务商提供了一个域名,做了动态解析和端口映射,映射到这台主机的22端口就好了,所以不用担心IP变化导致SSH断开的问题。

    好了装好了服务器之后,服务商提供了一个ADSL的拨号操作过程,用pppoe命令都可以完成,如果你的是Linux的主机一般都是用这个。然后服务商还会给给你一个拨号账号和密码。

    那么接下来就是试下拨号了。

    服务商会提供详细的拨号流程说明。

    比如无极的是这样的:

    拨号流程

    设置好了之后,就有几个关键命令:

    1

    2

    3

    pppoe-start 拨号

    pppoe-stop断开拨号

    pppoe-status 拨号连接状态

    如果想重新拨号,那就执行stop、start就可以了。

    反复执行,然后查看下ip地址,你会发现拨号一次换一个IP,是不是爽翻了!

    好,那接下来就设置代理吧。

    设置代理服务器

    之前总是用别人的代理,没自己设置过吧?那么接下来我们就来亲自搭建HTTP代理。

    Linux下搭建HTTP代理,推荐Squid和TinyProxy。都非常好配置,你想用哪个都行,且听我慢慢道来。

    我的系统是CentOS,以它为例进行说明。

    Squid

    首先利用yum安装squid

    1

    yum -y install squid

    设置开机启动

    1

    chkconfig --level 35 squid on

    修改配置文件

    1

    vi/etc/squid/squid.conf

    修改如下几个部分:

    1

    2

    3

    http_access allow !Safe_ports#deny改成allow

    http_access allow CONNECT !SSL_ports#deny改成allow

    http_access allow all#deny改成allow

    其他的不需要过多配置。

    启动squid

    1

    sudo service squid start

    如此一来配置就完成了。

    代理使用的端口是3128

    TinyProxy

    首先添加一下镜像源,然后安装

    1

    2

    3

    rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

    yum update

    yum install tinyproxy

    修改配置

    1

    vi /etc/tinyproxy/tinyproxy.conf

    可以修改端口和允许的IP,如果想任意主机都连接那就把Allow这一行注释掉。

    1

    2

    3

    4

    Port 8888 #预设是8888 Port,你可以更改

    Allow 127.0.0.1 #将127.0.0.1改成你自己的IP

    #例如你的IP 是1.2.3.4,你改成Allow 1.2.3.4,那只有你才可以连上这个Proxy

    #若你想任何IP都可以脸到Proxy在Allow前面打#注释

    启动TinyProxy

    1

    service tinyproxy start

    好了,两个代理都配置好了。

    你想用那个都可以!

    不过你以为这样就完了吗?太天真了,我被困扰了好几天,怎么都连不上,我还在怀疑是不是我哪里设置得不对?各种搜,一直以为是哪里配置有遗漏,后来发现是iptables的锅,万恶的防火墙。踩过的的坑,那就不要让大家踩了,用下面的命令设置下iptables,放行3128和8888端口就好了。

    1

    2

    3

    4

    5

    6

    service iptables save

    systemctl stop firewalld

    systemctl disablefirewalld

    systemctl start iptables

    systemctl status iptables

    systemctl enable iptables

    修改iptables配置

    1

    vi /etc/sysconfig/iptables

    1

    -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

    的下面添加两条规则

    1

    2

    -A IN_public_allow -p tcp -m tcp --dport 3128 -m conntrack --ctstate NEW -j ACCEPT

    -A IN_public_allow -p tcp -m tcp --dport 8888 -m conntrack --ctstate NEW -j ACCEPT

    如图所示

    保存,然后重启iptables

    1

    sudo service iptabels restart

    输入

    ifconfig得到IP地址,在其他的主机上输入

    1

    curl -x IP:8888 www.baidu.com

    测试一下,如果能出现结果,那就说明没问题。

    如果怎么配都连不上,那干脆关了你的防火墙吧。虽然不推荐。

    连接代理

    接下来才是重头戏,你咋知道你的服务器IP现在到底是多少啊?拨一次号IP就换一次,那这还了得?

    如果服务商提供了端口映射!那一切都解决了!直接用端口映射过去就好了。然而,我的并没有。

    自力更生,艰苦创业!

    首先我研究了一下DDNS服务,也就是动态域名解析。即使你的IP在变化,那也可以通过一个域名来映射过来。

    原理简单而统一:当前拨号主机定时向一个固定的服务器发请求,服务器获取remote_addr就好了,可以做到定时更新和解析。

    那么我找了一下,国内做的比较好的就是花生壳了,然后又找到了DNSPOD的接口解析。

    下面简单说下我的折腾过程,大家可以先不用试,后面有更有效的方法。

    花生壳

    现在花生壳出到3.0版本了,有免费版和付费版之分,我就试用了一下免费版的。这里是花生壳的一些配置和下载:

    花生壳配置

    下载花生壳客户端之后,会生成SN码,用这个在花生壳的官网登录后,会分配给你一个免费的域名。

    接下来这个域名就能解析到你的主机了。

    DNSPOD

    DNSPOD原理也是一样,不过好处是你可以配置自己的域名。

    在GitHub上有脚本可以使用。

    脚本链接

    具体的细节我就不说了,实际上就是定时请求,利用remote_addr更新DNSPOD记录,做到动态解析。

    解析接口

    不过!这两个有个通病!慢!

    什么慢?解析慢!但这不是他们的锅,因为DNS修改后完全生效就是需要一定的时间,这一秒你拨号了,然后更新了IP,但是域名可能还是解析着原来的IP,需要过几分钟才能变过来。这能忍吗?

    我可是在跑爬虫啊,这还能忍?

    自力更生

    嗯,V2EX果然是个好地方,逛了一下,收获不小。

    链接在此

    参考了abelyao 的思路,自己写了脚本来获取IP,保证秒级更新!

    此时,你还需要另一台固定IP的主机或者某个云服务器,只要是地址固定的就好。在这里我用了另一台有固定IP的阿里云主机,当然你如果有什么新浪云啊之类的也可以。

    那么现在的思路就是,拨号VPS定时拨号换IP,然后请求阿里云主机,阿里云主机获取VPS的IP地址即可。

    拨号VPS做的事情:

    定时拨号,定时请求服务器。使用bash脚本,然后crontab定时执行。

    远程服务器:

    接收请求,获取remote_addr,保存起来。使用Flask搭建服务器,接收请求。

    废话少说,上代码

    AutoProxy

    功能

    由于DDNS生效时间过长,对于爬虫等一些时间要求比较紧迫的项目就不太适用,为此本项目根据DDNS基本原理来实现实时获取ADSL拨号主机IP。

    基本原理

    client文件夹由ADSL拨号客户机运行。它会定时执行拨号操作,然后请求某个固定地址的服务器,以便让服务器获取ADSL拨号客户机的IP,主要是定时bash脚本运行。

    server文件夹是服务器端运行,利用Python的Flask搭建服务器,然后接收ADSL拨号客户机的请求,得到remote_addr,获取客户机拨号后的IP。

    项目结构 
    serverconfig.py 配置文件。 
    ip 客户端请求后获取的客户端IP,文本保存。 
    main.py Flask主程序,提供两个接口,一个是接收客户端请求,然后将IP保存,另外一个是获取当前保存的IP。 clientcrontab 定时任务命令示例。 
    pppoe.sh 拨号脚本,主要是实现重新拨号的几个命令。 
    request.sh 请求服务器的脚本,主要是实现拨号后请求服务器的操作。 
    reqeust.conf 配置文件。 使用 
    服务器

    服务器提供两个功能,record方法是客户机定时请求,然后获取客户机IP并保存。proxy方法是供我们自己用,返回保存的客户机IP,提取代理。

    克隆项目

    1

    git clone https://github.com/Germey/AutoProxy.gi

    修改配置

    修改config.py文件

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

    1

    2

    cd server

    nohup python main.py

    ADSL客户机

    克隆项目

    1

    git clone https://github.com/Germey/AutoProxy.git

    修改配置

    修改reqeust.conf文件

    KEY 是客户端请求服务器时的凭证,在server的config.py也有相同的配置,二者保持一致即可。 
    SERVER是服务器项目运行后的地址,一般为http://<服务器IP>/record。如http://120.27.14.24/record。

    修改pppoe.sh文件

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

    运行

    设置定时任务

    1

    crontab -e

    输入crontab的实例命令

    1

    */5 * * * * /var/py/AutoProxy/client/request.sh /var/py/AutoProxy/client/request.conf >> /var/py/AutoProxy/client/request.log

    注意修改路径,你的项目在哪里,都统一修改成自己项目的路径。

    最前面的*/5是5分钟执行一次。

    好了,保存之后,定时任务就会开启。

    验证结果

    这样一来,访问服务器地址,就可以得到ADSL拨号客户机的IP了。

    1

    2

    3

    4

    5

    import requests

    url = 'http://120.27.14.24:5000'

    proxy = requests.get(url, auth=('admin', '123')).text

    print(proxy)

    实例结果:

    1

    116.208.97.22:8888

    扩展

    如果你有域名,可以自己解析一个域名,这样就可以直接请求自己的域名,拿到实时好用的代理了,而且定时更新。

    代理设置 
    urllib2

    1

    2

    3

    4

    5

    6

    import urllib2

    proxy_handler = urllib2.ProxyHandler({"http": 'http://' + proxy})

    opener = urllib2.build_opener(proxy_handler)

    urllib2.install_opener(opener)

    response = urllib2.urlopen('http://httpbin.org/get')

    print response.read()

    requests

    1

    2

    3

    4

    5

    6

    import requests

    proxies = {

    'http': 'http://' + proxy,

    }

    r = requests.get('http://httpbin.org/get', proxies=proxies)

    print(r.text)

    以上便秒级解决了动态IP解析,自己实现了一遍DDNS,爽!

    那这样以来,以后就可以直接请求你的主机获取一个最新可用的代理IP了,稳定可用,定时变化!

    以上便是ADSL拨号服务器配置的全过程,希望对大家有帮助!

    以上是

Python爬虫进阶七之设置ADSL拨号服务器代理

  • 的内容,更多

进阶 爬虫 拨号 设置 服务器 代理 Python adsl

  • 的内容,请您使用右上方搜索功能获取相关信息。

转载于:https://www.cnblogs.com/banhulaojiu/p/9668212.html

爬虫IP代理-设置ADSl拨号服务器代理相关推荐

  1. Python爬虫技巧一之设置ADSL拨号服务器代理

    Python爬虫技巧一之设置ADSL拨号服务器代理 https://zhuanlan.zhihu.com/p/25286144

  2. Python使用Tornado+Redis维护ADSL拨号服务器代理池

    们尝试维护过一个免费的代理池,但是代理池效果用过就知道了,毕竟里面有大量免费代理,虽然这些代理是可用的,但是既然我们能刷到这个免费代理,别人也能呀,所以就导致这个代理同时被很多人使用来抓取网站,所以当 ...

  3. 使用Tornado+Redis维护ADSL拨号服务器代理池

    我们尝试维护过一个免费的代理池,但是代理池效果用过就知道了,毕竟里面有大量免费代理,虽然这些代理是可用的,但是既然我们能刷到这个免费代理,别人也能呀,所以就导致这个代理同时被很多人使用来抓取网站,所以 ...

  4. python—简单数据抓取七(采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用,利用ip池访问网页并将scrapy爬取转移到items的数据存入到数据库)

    学习目标: Python学习二十七-简单数据抓取七 学习内容: 1.采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用 2.利用ip池访问网页并将scrapy爬取转移到it ...

  5. 内网渗透--frp代理设置与proxychains代理设置

    标题内网渗透–frp代理设置与proxychains代理设置 内网服务器 内网IP地址 外网IP地址 内网web服务器(windows 7) 192.168.52.143 192.168.213.13 ...

  6. 浏览器代理设置和取消代理

    网络能够正常访问,但是浏览器打不开,QQ 可以正常上网.可以 ping的通网络.浏览器没有出现报错情况下 第一种  判首先查看浏览器是否开启了代理, (如果是,就取消代理):操作步骤按照箭头点击鼠标 ...

  7. 【爬虫学习笔记day11】1.9. 参考阅读:urllib:Handler处理器和自定义Opener+ProxyHandler处理器(代理设置)+cookiejar库 和 HTTPCookieProc

    文章目录 1.9. 参考阅读:urllib:Handler处理器和自定义Opener Handler处理器 和 自定义Opener 简单的自定义opener() ProxyHandler处理器(代理设 ...

  8. 前嗅ForeSpider教程:IP代理设置

    今天,小编主要为大家介绍一下:前嗅ForeSpider中的IP代理设置,主要内容包括:启用IP代理,静态代理设置,动态代理设置,这三大部分.具体内容如下: 一,启用IP代理 启用IP代理采集时,需要进 ...

  9. 第九部分 代理的使用(代理设置,代理池的搭建,用代理获取微信公众号文章)...

    网站采取的反爬虫措施有:弹出验证码,需要登录.检测某个IP在单位时间内的请求次数,超过规定的某个值,服务器拒绝服务,返回一些错误信息,这是封IP. 既然服务器封IP,可采用某种方式伪装IP,让服务器不 ...

  10. Python3爬虫教程之ADSL拨号爬虫ip池的使用

    在我之前做爬虫经常需要维护自己的爬虫ip池,他可以挑选出很多有用的爬虫地址,因为不是专业的而且这些爬虫ip通常是公共爬虫ip,所以可用率不是太高,而且这样类型的地址很大情况下都是多人共用的,被封地址概 ...

最新文章

  1. L1-047 装睡 (结构体解决)
  2. mysql 学习 博客_mysql学习
  3. 浅析linux内核中的idr机制
  4. Apache 内容动态缓冲模块 mod
  5. php插入成功数据不显示,PHP插入数据不成功,什么原因呢?
  6. 2016年成熟亚太地区公共云服务市场规模将达到81亿美元
  7. 【遥感数字图像处理】基础知识:第四章 遥感图像辐射纠正
  8. Debian 8 在虚拟环境中安装kivy
  9. 编译WINDOWS版FFmpeg:编译SDL
  10. 20.深入浅出:功率放大电路——参考《模拟电子技术基础》清华大学华成英主讲
  11. 哈希摘要、证书、对称密钥、公私密钥应用场景梳理
  12. ZAO作一下,你会是谁
  13. SPECTRUM发布6种新型AWG任意波形发生器
  14. 微信小程序实现多页面
  15. 【笔记|C++】最大公约数、最小公倍数的四种求法
  16. IE+调试修改html,IE下调试CSS与JS
  17. 【7.0】 数学建模 | 相关系数详解 | Person相关系数、Spearman相关系数
  18. discuz 版块导航function_forumlist.php,Discuz! X2扩建左侧版块导航 社区层次一目了然...
  19. nginx基础(七)
  20. visio中公式太小_串联管道/并联管道中调节阀可调比R的计算

热门文章

  1. 共建信创生态,助力组织国产化进程
  2. java浮点数的精确计算_Java 浮点数计算精度丢失问题?
  3. Android/iOS 终端快速截屏技巧
  4. java 普元_也谈普元 - 狂奔 lion - BlogJava
  5. 软件测试中的缺陷分析与管理
  6. 【MacOs系统-M2安装2022新版AWVS渗透工具】-保姆级安装教程
  7. java jdk 文档下载_JDK8 API文档(下载)
  8. 【特纳斯电子】keil uvision5 MDK RM v5.29 (附注册机+视频安装教程)
  9. 二分查找在java中的实现
  10. typora快捷键大全