1.问题背景

我们公司需要到某环保平台爬取环保信息,但平台那边先从封cookie开始,后来又封IP,目前又开始封账号。。本章就讲讲封IP问题的一个解决策略——部署ADSL服务器吧。

ADSL服务器是什么,我在这里就不详说了,可以百度下,总结来说,就是可以通过不断的拨号断开宽带连接,从而获取新的IP。

我们老板是一个善良的人,嗯嗯,要求很明确,一是爬虫脚本能运行稳定,二是成本低(泻药。。。),然后我和另外一个同事一同测试ip代理和ADSL服务器,发现,ADSL动态拨号还是相当稳定的,于是果断选择ADSL。

ADSL服务器不但便宜,而且稳定,但比较头疼的是,服务器需要我们自己部署,折腾了好几天,总算解决了各种问题,需要考虑的问题有以下几个方面:

  • 如何部署ADSL服务器;
  • 如何才能让ADSL服务器动态拨号,获取新的IP;
  • 如何才能让公司的脚本自动获取远程ADSL服务器的IP;
  • 【需要认真琢磨的】怎样对脚本改进,使得能够实现对IP的最大利用。

2.部署ADSL服务器环境

我使用的是云立方的动态拨号服务,预装的系统是ubuntu14.04,因为个人熟悉的原因。如果你喜欢Centos或者windows,也可以。以下是折腾几天部署服务器的总结:

目前使用的是云立方平台提供的ADSL动态拨号服务。
URL: https://www.yunlifang.cn/
Account: 账户名:XXXX  密码:XXXX 自己注册下吧。 0.远程登录
ssh root@远程ip -p 端口号
1.TinyProxy安装,在安装前应该先adsl-start打开网络,否则安装包无法更新。
adsl-start
sudo apt-get update
apt-get install tinyproxy注:在云立方ADSL服务器中, adsl-start/stop是pppoe-start/stop的别名,是shell命令。2.然后配置参数文件:
vi /etc/tinyproxy.conf3.修改下面两个部分。
Port 8888      #预设是8888端口
Allow 127.0.0.1     #将127.0.0.1改成你自己的IP,只有这个IP才能连接,前面打#注释掉则所有人都可以连接4.TinyProxy打开与关闭
service tinyproxy start/restart/stop5.在sender.py文件目录下发送文件到远程服务器根目录下
scp -P 20133 sender.py root@58.211.138.107:~/6.安装依赖的包文件
apt-get install python3-pip
pip3 install requests[
进程查看命令
ps -ef | grep python/ppp
]7.在运行sender.py文件前务必关闭防火墙
sudo apt-get install ufw
sudo ufw disable8.运行sender2.py
python3 sender2.py便可获取新的ip9.有时会遇到多个ppp的问题,这是由于ppp进程冲突导致的,解决方法是重启服务器,
reboot10.有时会遇到adsl-start超时问题,重启也无法解决,貌似是宽带的问题,还是直接问云立方客服吧, QQ:4006677945。

3.如何才能让ADSL服务器动态拨号,获取新的IP

不说废话了,在2里第8个步骤我已经提示了下,就是通过运行sender2.py这个脚本,从而实现ip的自动更换,下面直接粗暴的贴上代码,核心代码就是 pppoe-start/stop,执行一次脚本后,就能实现动态拨号:

import subprocess
import re
import requests
import time# 拨号网卡
ADSL_IFNAME = 'ppp1'
# 测试URL
TEST_URL = 'http://www.baidu.com'
# 测试超时时间
TEST_TIMEOUT = 5
# 拨号出错重试间隔
ADSL_ERROR_CYCLE = 3
# ADSL命令
ADSL_BASH_STOP = 'pppoe-stop'
ADSL_BASH_START = 'pppoe-start'
# 代理运行端口
PROXY_PORT = 8888
# 客户端唯一标识
CLIENT_NAME = 'adsl1'class Sender(object):def get_ip(self, ifname=ADSL_IFNAME):"""获取本机ip:param ifname: 网卡名称:return:"""(status, output) = subprocess.getstatusoutput('ifconfig')if status == 0:print(output)result = re.findall(ifname + '.*?inet addr:.*?(\d+\.\d+\.\d+\.\d+)', output, re.S | re.I)if result:ip = result[0]return ipdef test_proxy(self, proxy):"""测试代理:param proxy: 代理:return: 测试结果"""try:response = requests.get(TEST_URL, proxies={'http': 'http://' + proxy,'https': 'https://' + proxy}, timeout=TEST_TIMEOUT)if response.status_code == 200:return Trueexcept Exception as e:print(e)return Falsedef adsl(self):"""拨号主进程:return: None"""print('ADSL Start, Remove Proxy, Please wait')subprocess.getstatusoutput(ADSL_BASH_STOP)time.sleep(0.5)(status, output) = subprocess.getstatusoutput(ADSL_BASH_START)print('status', status, 'output', output)if status == 0:print("ADSL successfully")ip = self.get_ip()if ip:print('Now IP', ip)print('Testing Proxy, Please wait')proxy = '{ip}:{port}'.format(ip=ip, port=PROXY_PORT)while True:if self.test_proxy(proxy):print('Valid Proxy')breakelse:print('Invalid Proxy')print('Sleeping')subprocess.getstatusoutput('service tinyproxy stop')time.sleep(0.5)subprocess.getstatusoutput('service tinyproxy restart')else:print('Get IP Failed, Redailing')if __name__ == '__main__':sender = Sender()sender.adsl()

4.如何才能让公司的脚本自动获取远程ADSL服务器的IP

24点了...困了,有时间补上。。。提示:在本地运行一个获取ip脚本,用到的主要模块是paramiko...

爬虫进阶——解决封IP问题| 部署ADSL服务器获取动态IP相关推荐

  1. Vue项目多地IP地址部署,后台配置动态IP

    前端代码部署到用户本地,打包部署之后,后台以部署地的服务器ip为ip.我是直接通过在index.html文件(此文件项目打包不会的时候不会被打包)中设置一个全局的window对象的IPconfig属性 ...

  2. linux系统自动获取ip地址,Linux系统下设置静态IP或自动获取动态IP的简单方法

    Linux下为机器设置静态IP地址: 复制代码 代码如下: vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改这个文件内容如下形式: 复制代码 代码如下: ...

  3. linux怎么静态改为自动获取,Linux系统下设置静态IP或自动获取动态IP的简单方法...

    linux下为机器设置静态ip地址: 复制代码代码如下: vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改这个文件内容如下形式: 复制代码代码如下: # ...

  4. wr885n虚拟服务器设置,动态IP设置:选择动态IP(以太网宽带

    tplink885n设置操作步骤如下 一台新购买(恢复出厂设置)的TL-WR885N路由器,要实现上网功能,需要进行下面3个步骤 :1.TL-WR885N路由器安装;2.设置电脑IP地址;3.TL-W ...

  5. 服务器上登录网页ip地址,如何在服务器上做iP地址跳转

    如何在服务器上做iP地址跳转 内容精选 换一换 当网站没有接入到WAF前,DNS直接解析到源站的IP.网站接入WAF后,需要把DNS解析到WAF的CNAME,这样流量才会先经过WAF,WAF再将流量转 ...

  6. 广播搜寻服务器的动态IP

    我服务器放在景区镇上租的住处里,附近经常因为施工或是乱开挖之类的导致断电.我用的电信宽带.每次断电之后服务器自动重启就得重新分配一个ip.因为用了域名服务,重启后能根据域名查询到新的IP. 但是,我还 ...

  7. mysql动态ip域名连接_用本地动态IP连接本地mysql

    一个问题已经困扰了我很久的问题今天终于解决了... 在用C++连接mysql时,用本地的动态IP加端口号连接本地的数据库mysql_real_connect(conn,"192.168.22 ...

  8. zabbix如何监控ip地址_Zabbix主动模式监控动态IP服务器

    一.需求:服务器(Linux系统)使用的是动态IP(PPOE拨号,不定时更改IP),现在要求使用Zabbix监控服务器状态. 1,zabbix健康服务器设置: configuration-Templa ...

  9. 电脑ip地址设置_关于路由器动态IP如何设置教程

    动态ip一般都是用于居民公寓内部或者是校园区,为了节省网络资源,而采取的一种措施:那么到底该怎么样设置动态ip的无线路由器,使之能够共享无线网络呢? 无线路由器动态IP上网的设置,其实非常的简单:只需 ...

最新文章

  1. day07-字符编码、文件操作
  2. Web应用主动侦测工具Skipfish
  3. 对GET/POST请求返回cookie中的键值对进行重新组合
  4. Python教程:如何将list嵌套的list的[]去掉
  5. tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件
  6. 【CodeForces - 1096D】Easy Problem(dp,思维)
  7. centos7下swoole1.9的安装与HttpServer的使用
  8. webstorm plugins emmet
  9. 1、javascript的继承function
  10. OpenStack踩坑记录
  11. Linux进程间通信--命名管道
  12. hsf 架构_HSF源码剖析
  13. qq四国军旗2.1 beat03 builde017记牌器开发思路(二)
  14. Riverbed破解数字性能密码,引领云时代数字变革
  15. PMS进化论:回顾过去才能更好地看向未来!
  16. 创建API Signing Key
  17. python--文件的导入与导出
  18. 什么是Session 如何使用Session
  19. unity3d:Matrix4x4矩阵位移,缩放,旋转
  20. LeetCode-977有序数组的平方

热门文章

  1. SpringCloudAlibaba - Nacos (1) 服务治理
  2. 51单片机学习笔记-6串口通信
  3. C# NutShell 第十四章 并发与异步
  4. Activity的创建步骤+Activity之间的数据传递+案例(人品测试器)
  5. “网红”液冷数据中心是如何实现的?
  6. android 酷狗demo_Android仿酷狗音乐自定义侧滑菜单控件简单实现
  7. Sitecore 8.2 工作流程
  8. 极客日报第124期:脉脉因“App 整改下架”事件致歉;阿里云全年营收超 600 亿;腾讯防大量群消息骚扰专利获授权
  9. 甲骨文的历史之收购太阳公司
  10. Should Geithner Resign?