通过Python利用ADSL服务器和tinyproxy构建数据自己的动态代理IP池,用django+redis做web服务,提供IP接口

MXProxyPool:动态代理ip池(抓取、存储、测试) MXProxyPool 动态代理ip池 架构图 说明:爬取模块将会爬取免费代理,免费代理的可用性低,如需获取高效的代理ip,请购买付费代理()。 安装Python 3.5+ 安装Redis,并启动服务 # mac os安装 pip install redis # 启动redis redis-server /usr/local/etc/redis.conf 安装依赖库 cd MXProxyPool pip install -r requirements.txt 修改配置 settings.py存放了配置信息 运行代理池 cd MXProxyPool python3 run.py api接口 # 随机获取一个代理 http://localhost:8000/fetch 使用代理池示例 import requests from proxypool.settings import API_HOST 立即下载

应公司业务需求需要在一些地方使用代理,要求连通率高,速度快,最主要的还要便宜,对比多家供应商后,最后还是决定自购拨号服务搭建代理IP池。

需要配置:1.一台或多台adsl服务器(用以提供IP,可网上购买,通过ssh同域名连接)2.一台正常固定IP服务器拥来搭建IP代理池。(统一配置:python3.5以上环境)

具体配置:

1.在ADSL服务器上部署tinyporxy服务, 可以直接yum安装(yum -y install tinyproxy);

   默认配置文件 /etc/tinyproxy/tinyproxy.conf,可执行文件  /usr/sbin/tinyproxy;

   需要将配置文件中的第210行 Allow 127.0.0.1 注释掉,23行 Port 8888 改为自己喜欢的端口(请注意在防火墙中将该端口开启);

   这样子代理服务器就配置好了,可以直接通过 tinyproxy 启动服务,killall tinyproxy 关闭服务;

   ADSL服务器需要通过 pppoe 来进行拨号,需要有宽带账号,如果是直接购买的拨号服务器,一般都会配置好(我的就是);

   拨号命令:pppoe-start (进行拨号),pppoe-stop(断开拨号连接),pppoe-status(查看当前拨号状态);

2. 用来做代理池的服务器需要安装 redis,python3安装django,redis包

  (之所以使用django是因为之前的爬虫分发服务是基于Django实现的,所以现在只是在上面增加个代理池的);

代码逻辑:

   之所以需要设置代理池,是因为我们所需要的代理IP就是拨号服务器不断变化的那个个IP,

代理池web服务最少应该提供三个接口:

   1.在重新拨号(切换IP)前请求一次的接口 ,用来清除此台拨号服务器服务器上次提交的IP,

   2.重新拨号成功后(成功切换IP)提交IP的接口,

   3.用来提取IP的接口,

   主要操作 redis 的 hash 类型(用来唯一标识一台拨号服务器和其提交的IP), 链表类型(用来做IP池)

为了应对本身业务需求和最大化利用代理IP增加:

   4.提取到IP使用过后重新放入代理池的接口

    根据测试得出单个代理对请求速度影响较小的最大并发数,链表内放入代理  IP*最大并发数 (我这里设置为22)

    又另外增加redis 集合类型(防止提取到不可用IP)

代码部分:

  代理池端部分代码,如需使用,可以直接引入到Django视图中,自己构建4个API接口,分别调用四个方法。

import redis

class ProxyPool:
    def __init__(self):
        self.pool = redis.ConnectionPool(host='127.0.0.1',port=6379, db=7)
    #删除旧的IP
    def update_del(self,only):
        try:
            conn = redis.Redis(connection_pool=self.pool)
            #哈希表中取出本次提供IP服务器在上一次提供的IP
            oldIP = conn.hget('Onlypool',only)
            if oldIP:
                #删除唯一标识
                conn.hdel('Onlypool',only)
                oldIP = str(oldIP,encoding='utf-8')
                #在集合中删除上次的IP
                conn.srem('IPset',oldIP)
                conn.lrem('IPpool',oldIP,0)
                return {'state':1,'message':'操作成功'}
            else:
                return {'state':2,'message':'未找到该机器'}
        except Exception as e:
            return {'state':0,'message':'操作失败--'+str(e)}
    #增加新的IP
    def update_put(self,ip,only):
        try:
            conn = redis.Redis(connection_pool=self.pool)
            #判断此IP是否已经存在于池中
            state = conn.sismember('IPset', ip)
            if state:
                return {'state': 0, 'message': '此IP以存在于池中'}
            #以本次提供IP的唯一标识做键写入哈希表中
            conn.hset('Onlypool',only,ip)
            # 在集合中添加本次IP
            conn.sadd('IPset', ip)
            proxy = [ip] * 22
            #放入IP池中
            for i in proxy:
                conn.rpush('IPpool',i)
            return {'state':1,'message':'操作成功'}
        except Exception as e:
            return {'state':0,'message':'操作失败--'+ str(e)}
    #获取指定数量的有效IP
    def getIP(self,num=1):
        try:
            conn = redis.Redis(connection_pool=self.pool)
            ipList = []
            for i in range(num):
                while True:
                    ip = conn.lpop('IPpool')
                    if ip:
                        state = conn.sismember('IPset', ip)
                        if state:
                            ip = str(ip,encoding='utf-8')
                            ipList.append(ip)
                            break
                    #数量不足时,放弃提取,并把已经提取的重新放回池中
                    else:
                        leninfor = len(ipList)
                        for ip in ipList:
                            conn.rpush('IPpool', ip)
                        return {'state': 0, 'message': 'IP不足,可用长度为:{0}'.format(leninfor)}
            return {'state': 1, 'ipList':ipList,'message':'操作成功'}
        except Exception as e:
            return {'state': 0, 'message': '操作失败--' + str(e)}
    #把使用过后的IP重新塞入池中
    def putIP(self,ipList):
        try:
            conn = redis.Redis(connection_pool=self.pool)
            for ip in ipList:
                # 判断是否存在于集合中,存在即有效,不存在则放弃存入
                state = conn.sismember('IPset', ip)
                if state:
                    conn.rpush('IPpool',ip)
            return {'state':1,'message':'操作成功'}
        except Exception as e:
            return {'state': 0, 'message': '操作失败--' + str(e)}

if __name__ == '__main__':
    pass

拨号服务器端代码,这里设置没隔三分钟左右重新更换IP, 这里的机器唯一标识为图简单,自己设置

#!/usr/bin/python3
import re,time,os,requests,json,datetime,random
#唯一标识
only = 'only1'
#切换IP,重启代理服务
def changeIP():
    os.system('pppoe-stop')
    time.sleep(3)
    os.popen('service tinyproxy stop')
    os.popen('pppoe-start')
    time.sleep(7)
    os.popen('service tinyproxy start')
#取出当前IP
def extractIP():
    infor = os.popen('pppoe-status').read()
    try:
        ip = re.search('(\d+\.\d+\.\d+\.\d+)',infor).group(1)
        return ip
    except:
        return False
#删除旧的IP
def updateDel():
    url = 'http://***.**.**.***:8000/proxy/updateDel?&only={0}'.format(only)
    for i in range(3):
        try:
            res = requests.get(url,timeout=3)
            infor = json.loads(res.text)
            if infor['state']:
                break
            else:
                continue
        except Exception as e:
            continue
#提交新的IP
def updatePut(ip):
    ip = ip+':'+'8888'
    url = 'http://***.**.**.***:8000/proxy/updatePut?ip={0}&only={1}'.format(ip,only)
    for i in range(3):
        try:
            res = requests.get(url,timeout=3)
            infor = json.loads(res.text)
            if infor['state']:
                break
            else:
                continue
        except Exception as e:
            continue

if __name__ == '__main__':
    a = 1
    while True:
        if a==2:
            time.sleep(random.randrange(170,230))
        a=2
        updateDel()
        #删除IP后等待2秒在执行重新拨号,为防止池中取出不可用代理
        time.sleep(2)
        #print('已经删除旧IP')
        while True:
            changeIP()
            ip = extractIP()
            if ip:
                break
        updatePut(ip)
        #print('已经更新IP')

 

可能需要到的:

安装tinyproxy失败,需要centos更新yum源:yum install epel-release
killall无效,需要安装psmisc:                             yum install psmisc

centos7防火墙端口添加
firewall-cmd --zone=public --add-port=8888/tcp --permanent

重新载入
firewall-cmd --reload

 

最新:https://blog.youkuaiyun.com/MeteorCountry/article/details/82729027

反无人机技术实战解析:从探测到拦截的全方位防御策略 本文深入解析了反无人机(C-UAS)技术的全链条防御策略。从雷达、无线电频谱、光电等多维度探测技术,到数据融合与威胁评估,再到无线电干扰、导航诱骗及物理拦截等核心拦截手段,系统阐述了如何构建从探测到拦截的实战化防御体系,为关键设施、大型活动等场景提供定制化空域安全解决方案。 阅读详情

相关推荐

VMware ESXi 7.0下Intel网卡SR-IOV配置实战:解决虚拟化网络延迟问题

本文详细介绍了在VMware ESXi 7.0环境下为Intel网卡配置SR-IOV(单根I/O虚拟化)的完整实战流程。通过硬件辅助直通技术,虚拟机可直接访问物理网卡资源,有效绕过虚拟化层瓶颈,从而显著降低网络延迟和CPU开销,适用于金融交易、实时计算等对性能敏感的场景。

embedding5hiker的博客 554

利用adsl拨号服务器VPS构建代理IP池

一、工具准备 动态vps: 我用的是云立方的动态vps,0.5G内存,11G硬盘,20G宽带,一年1800元,动态vps主要是运行代理服务,比较耗宽带,通过拨号来更换IP,实现动态代理的效果 固定IP服务器:用的阿里云服务器,1核1G内存,40G云盘,一年836元,该服务器主要是实时获取动态vps的IP,并对外提供接口,这些服务不怎么耗资源,该服务器还可以用来跑爬虫或者搭网站 二、环境搭建 动态vps 功能:搭建代理服务,并通过在vps上拨号切换IP,将切换后的IP传到固定IP的服务器上 工具:代理服

编辑编辑器 6379

基于51单片机的通讯聊天系统

通过编写51单片机通讯聊天程序,掌握51单片机的各个模块的知识点和运用C语言编写51单片机的能力。用51单片机与口袋开发板设计实现一个单片机与电脑串口助手实现通讯功能的程序。程序的主要功能如下: 1 OLED初始化显示Welcome to Bluetooth communication! 字符串。 2 程序开始时处于接收信息模式, 电脑串口助手发送信息时,将从初始化字符第一个开始显示,电脑串口助手发送信息后,蜂鸣器响铃2秒左右。 3 每次同时按下左右键时,可以轮流切换接收/发送信息模式 4 在发送信息模式时

m0_47419053的博客 3638

Python Scrapy框架下构建动态代理池

Scrapy框架下构建动态代理池,进行反反爬策略构造

CharizarD12138的博客 759

30分钟搭建AI科研写作工作台:基于WorkBuddy的论文全流程加速实践

在人工智能技术日益普及的今天,如何利用智能工具提升专业领域工作效率成为关键课题。其核心原理在于通过模块化设计,将复杂的任务流程拆解为可复用、可编排的标准化技能单元,并结合精准的指令控制,实现从通用对话到深度任务执行的转变。这一技术价值在于显著降低重复性劳动强度,将人的创造力聚焦于核心决策与创新环节。在科研写作、数据分析、代码开发等场景中,这类智能工作台能有效辅助完成文献调研、内容生成、格式校验等繁琐步骤。本文以科研论文写作为具体应用场景,深入探讨如何利用WorkBuddy这一智能工作台,通过配置核心科研技能

weixin_29032489的博客 1503

深度学习笔记(1)机器学习与深度学习基础

一些深度学习的简单概念和Transformer的学习。

hanliu2003的博客 1492

搭建 adslproxy 代理池

本文采用 redis 做代理IP的存储。存储代理IP前,先使用 adslproxy 做重新拨号和代理IP可用性校验,可用后再保存到 redis 里。在进行重新拨号前,先删除这个原来保存的代理 IP,然后再重新进行拨号操作。 然后使用的 adslproxy 搭建一个提取代理 IP 的工具,通过一个 web 接口给客户端使用的时候。客户端用的时候,直接读取这个 web 接口就可以使用代理 IP。本文采用阿斯云的拨号vps服务器做搭建平台。所以连起来重新拨号更换IP就是 2. 记录hosts 记录 hosts

zyy247796143的博客 1197

PLS-SEM(偏最小二乘路径建模)模型拟合优度指标

PLS-SEM(偏最小二乘路径建模)是一种基于方差的分析方法,侧重于预测导向,通过迭代优化路径系数和外部权重来最大化潜变量的解释方差(R²)。其评估指标分为外部测量模型和结构模型两部分:外部测量模型关注潜变量与显变量的关系,通过标准化载荷(>0.7)、信度指标(Cronbach’s α、复合信度CR>0.7)、聚合效度(AVE>0.5)和区分效度(Fornell-Larcker标准、HTMT<0.85)来评估模型的可靠性和有效性。结构模型则检验潜变量间的因果关系,通过路径系数(β值)

wewil_lwin的博客 3233

自制http动态代理资源池

因有数据采集的业务要求,有时需要通过代理来进行采集,要求不高就搜索了网上的免费代理,建立了一个自己的代理ip池。简单记录下。 几个代理网站: https://www.xicidaili.com/wt/1 http://www.xsdaili.com/ http://www.66ip.cn/ http://www.kxdaili.com/dailiip.html 写了个简单的爬取工...

wujie696的专栏 968

Python全栈入门到实战【基础篇 04】核心基础:变量与4种基础数据类型(int/float/str/bool)

本文介绍了Python编程中的变量和四种基础数据类型,作为后续所有语法的入门前提。变量是数据的“容器”,解决数据复用问题,而数据类型决定数据能进行的操作。文章详细讲解了变量的定义语法、命名规则(强制语法和推荐风格)、赋值与修改原理,并通过实操示例展示其应用场景。正确使用变量可以提升代码复用性、简化修改并增强可读性,是编程效率的核心原则。掌握这些基础知识能避免90%的新手语法错误,为学习更复杂的Python语法打下坚实基础。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4318

[关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱

本文主要讲解Gephi绘制作者间的关系图谱,该软件可以广泛应用于社交网络、知识图谱分析,推荐读者使用。这是非常基础的一篇文章,重点讲解Gephi使用方法,希望对大家有所帮助。

杨秀璋的专栏 1万+

通过Python利用ADSL服务器和tinyproxy构建数据自己的动态代理IP池,用django+redis做web服务 (优化版)

代理池初始版:https://blog.youkuaiyun.com/MeteorCountry/article/details/82085238 上一篇文章中所搭建的代理池在使用过程中出现了点小问题,代理池中莫名的多出了一些无效代理,检查日志后发现是在更新代理池时旧的代理IP没有删除成功,就添加了新的代理IP。究其原因是因为在请求删除接口时网络已断开导致多次请求失败,跳过了删除这一步骤,进行了重拨、更新,...

本与太阳肩并肩,何须再用飞上天 1387

Rcpp简介

在数据分析时,代码的运行速率常常是我们所关心的话题之一。小Q往期的文章中也有介绍通过并行计算提升R运行速率的文章。然而R代码自身的运行速率偏慢,具有某种“先天缺陷”。因此,并行R函数的运行时间有时仍然不尽人意。本期小Q与大家分享R的另一提速方式:Rcpp之效率瓶颈突破。 1 什么是Rcpp 在往期的文章中曾讲过,我们在R中尽量采用向量化或内建函数运算,避免自编循环带来的额外时间消耗。然而,算法中有时难以避免循环,若循环部分耗时严重,直接并行含有该循环的算法显得力不从心,此时又该如何?稍有编程知识的读者可

Mrrunsen的博客 2261

Python 实现PPPOE自动拨号

文章目录一、WIN10添加PPPoE拨号连接设置二、python 实现 一、WIN10添加PPPoE拨号连接设置 1.1 右键点击桌面右下角的网络图标,打开网络和共享中心 1.2 在打开的网络和Internet中,从 拨号进入 设置新连接 1.3 在设置连接或网络向导中,选择 连接到Internet,并进入 新连接的设置 1.4 在连接到Internet对连接方式进行选择,一般来说宽带就是PPPoE模式 1.5 在选择之后,就是对用户名和密码,及名称进行设定 二、python 实现 代码如下(

云 网 数 智 安 量子 3578

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ADSL拨号代理-构建IP代理池

// An highlighted block var foo = 'bar'; yum update nss curl

Java搬砖师的博客 3471

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

利用ADSL拨号上网方式如何搭建服务器

序:搭建服务器需要两个条件硬件服务器和固定公网IP,随便一台个人电脑都可以作为硬件服务器,就剩下一个问题,如何获得一个固定公网IP。 第一章 扫盲:ADSL拨号上网方式,本地IP与公网IP的区别 一、如何查看本地IP 方法:进入Dos,输入命令ipconfig即可看到自己的内网IP地址,这个地址作为局域网内部交流使用。 二、如何查看公网IP 方法:IE浏览器输入网址...

1300

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ADSL拨号代理服务器实现HTTP代理的搭建过程

最近做一个项目时,发现购mai的厂商的代理似乎被识别了,总是拿不到正确的响应。于是尝试自己搭建了一个ADSL代理实现HTTP代理。 ADSL拨号代理:电信宽带每一次拨号后会更换IP,利用这一点在IP更换后将新的IP存入到代理池中。 代理的搭建过程分为以下几步: (1)购买代理服务器,笔者选择了淘b_a_o上销Liang最高的一家; (2)远程客fu给的代理服务器,拨号成功后,安装必要的软件...

tianluling2012的博客 8939

免费搭建ip代理池的保姆级方法(最详细最有效)

免费搭建ip代理池的保姆级方法(最详细最有效)

newxiaoou的博客 14万+

AOX Proxy Pool: 动态代理池的高效解决方案

AOX Proxy Pool: 动态代理池的高效解决方案 aox_proxy_pool 本项目是为了解决在抓取代理ip后, 代理ip失效快, 不稳定的问题 以及代理ip使用不方便等问题。 项目地址: https://gitcode.com/gh_mirrors/a...

gitblog_00092的博客 475

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

为了更加方便地维护和使用爬虫ip,我们可以像前文介绍的爬虫ip池一样把这些远程桌面的爬虫ip统一维护起来,所有拨号远程桌面的爬虫ip统一存储到一个公共的 Redis 数据库中,可以使用 Redis 的 Hash 存储方式,存好每台远程桌面和对应爬虫ip的映射关系。那怎么使用爬虫ip呢?之前我们也了解了付费爬虫ip的使用,付费爬虫ip的质量相对免费爬虫ip就会好不少,这的确已经是一个相对不错的方案了,但本节要介绍的方案可以使我们既能不断更换爬虫ip,又可以保证爬虫ip的稳定性。

weixin_44617651的博客 1027

家用网络搭建服务器(ADSL网络搭建IIS)

家用网络一般都是ADSL。现在家里都是多设备上网,所以一般家里都会有无线路由器。我们上网一般都是在无线路由上面拨号,然后把网络通过路由器共享给所有连接网络的设备。 ADSL与公司网络区别就是,公司一般都是百兆以上的光纤,一般都是静态IP,而家用网络都是动态的公网IP,所以公司网络可以搭建自己的服务器,而家用网络搭建的服务器公网是访问不到的。下面将给大家介绍一种内网服务器映射公网的方法,具体如下: ...

日常爱喝茶,闲时聊科技 9578

python搭建ip池

在爬取网站的时候我们有时候会遭受封ip等显现,因此我们需要搭建自己的ip池用于爬虫。 代码过程简述: 1、爬取代理ip网站信息 2、将获取的信息处理得到ip等关键信息 3、保存首次获取的ip信息并检测其是否可用 4、检测完毕将可用ip保存,搭建完成 下面是搭建完后的ip池展示: 老规矩先放总的代码后再一步步解析 # -*- coding: gbk -*- # 防止出现乱码等格式错误 # ip代理网站:http://www.66ip.cn/areaindex_19/1.htm.

m0_61720747的博客 6127

喂饭教程之基于auto-proxy-pool搭建动态ip代理池(青龙适用)

1.运行成功后会在/root/auto-proxy-pool/文件夹生成proxy.template.yml这个默认配置文件。ps 若您的主机为家宽,ip地址经常变更,推荐使用携趣代理可以免费使用api的形式添加ip白名单(详情看官网文档)以上为两个上游代理,多加一个代理池proxy: proxy1,proxy2,proxy3以此类推。4.(可选)多个上游代理ip则使用以下配置覆盖即可(多上游方式)2.添加如下代码(代理词格式为http://ip:2233)配置文件填写完成后保存!1.打开青龙的配置文件。

weixin_51863878的博客 8168

如何实现动态IP代理?动态IP代理技术原理解析

相比于固定IP代理,动态IP代理能够不断更换IP地址,避免封锁,提高访问成功率。本文将详细解析动态IP代理的工作机制,并介绍如何高效使用这一技术。是指代理服务器会在一定时间间隔(如每分钟、每次请求)内自动切换IP地址,从而提供不断变化的代理IP。如果你需要稳定、安全、高效的动态IP代理服务,了解并使用这些技术能够帮助你在多种网络任务中提高效率,并避免封锁风险。要实现动态IP代理,首先需要有一个代理IP的提供方。用户可以在每次请求前,从代理池中获取一个新的IP。:适用于高频访问的网站,如爬虫、广告监测等。

bicatrul的博客 2228

centos7.6 tinyproxy python test and 监控日志

【代码】centos7.6 tinyproxy python test and 监控日志。

tenc1239的博客 560

adsl拨号服务器构建代理池

一、工具准备 动态vps: 我用的是云立方的动态vps,0.5G内存,11G硬盘,20G宽带,一年1800元,动态vps主要是搭建代理服务,比较耗宽带,通过拨号来更换IP,实现动态代理的效果 固定IP服务器:用的阿里云服务器,1核1G内存,40G云盘,一年836元,该服务器主要是实时获取动态vps的IP,并对外提供接口,这些服务不怎么耗资源,该服务器还可以用来跑爬虫或者搭网站 二、环境搭建 动...

weixin_41074255的博客 2933
下一篇: 通过Python利用ADSL服务器和tinyproxy构建数据自己的动态代理IP池,用django+redis做web服务 (优化版)
A-f
A-f
博客等级 码龄9年 19粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值