一次IP池搭建的记录(一)

场景运用碰到了 购买的代理IP无法使用的情况下,自己进行IP搭建以实现IP的可用性;

IP 池的搭建方法还是很多的,但是质量高一些的方案都离不开自己购买服务器搭建服务,这篇文章给大家分享一次 VPS 的IP池搭建;

一、 VPS 配置

第一步、购买服务器完成后链接上 vps 一定要先拨号

pppoe-start

第二步、安装 软件 squid

yum install squid -y

第三步、找到配置文件进行修改

vi /etc/squid/squid.conf

全局搜索 http_access deny all 找到 它所在行,再他的上一行添加:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
acl auth_user proxy_auth REQUIRED
http_access allow auth_user

默认的端口号 3128 也是可以修改的

http_port 3128

文章的底部 添加 高匿代理的配置

request_header_access X-Forwarded-For deny all
request_header_access From deny all
request_header_access Via deny all

修改完成后如图:

第四步、安装 htpasswd

yum -y install httpd-tools

之后就是配置账号密码以及重启 squid

htpasswd -c /etc/squid/passwd 代理IP用户名
service squid restart
systemctl enable squid  # 设置为 开机自启


/sbin/ifdown ppp0;/sbin/ifup ppp0;ifconfig  # IP 重新拨号

上述就是配置 单台vps 的完整 流程

二、多IP 提取交互

搭建一台的 VPS 明显是不够正常使用的,这个时候就需要 另外一台固定IP的 服务器或者redis 作为 中转调用,这个就看个人习惯了,可以是 flask api 提取调用,也可以是 redis 自己选择使用。

redis 方案:

自动切换 IP

# coding=utf-8

ADSL_BASH = '/sbin/ifdown ppp0;/sbin/ifup ppp0'
ADSL_IFNAME = 'ppp0'

import re
import time
import datetime
from redis import StrictRedis
import subprocess

redis_host = '自己的 redis IP'
redis_port = 6379
redis_password = '自己的 redis 密码'

redis = StrictRedis(host=redis_host, password=redis_password, port=redis_port, db=0)

ADSL_CYCLE = redis.get('ADSL_CYCLE')
if ADSL_CYCLE is None:
    ADSL_CYCLE = 60
else:
    ADSL_CYCLE = int(ADSL_CYCLE)


class Sender:
    def get_ip(self, ifname=ADSL_IFNAME):
        """
        获取本机IP
        :param ifname: 网卡名称
        :return:
        """
        (status, output) = subprocess.getstatusoutput('ifconfig')
        if status == 0:
            pattern = re.compile(ifname + '.*?inet.*?(\d+\.\d+\.\d+\.\d+).*?netmask', re.S)
            result = re.search(pattern, output)
            if result:
                ip = result.group(1)
                return ip
            else:
                pass

    def set_proxy(self, proxy):
        """
        设置代理
        :param proxy: 代理
        :return: None
        """
        redis_cli_ip = StrictRedis(host=redis_host, password=redis_password, port=redis_port, db=15)
        redis_cli_ip.set(proxy, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), ex=ADSL_CYCLE - 5)
        redis_cli_ip.close()

    def adsl(self):
        """
        拨号主进程
        :return: None
        """
        ADSL_ERROR_CYCLE = 5
        PROXY_PORT = 3128
        while True:
            print('ADSL Start, Please wait')
            (status, output) = subprocess.getstatusoutput(ADSL_BASH)
            if status == 0:
                print('ADSL Successfully')
                ip = self.get_ip()
                if ip:
                    proxy = '{ip}:{port}'.format(ip=ip, port=PROXY_PORT)
                    print('Now proxy:%s' % proxy)
                    self.set_proxy(proxy)
                    print('Sleeping')
                    time.sleep(ADSL_CYCLE)
                else:
                    print('Get IP Failed, Re Dialing')
                    time.sleep(ADSL_ERROR_CYCLE)
            else:
                print('ADSL Failed, Please Check')
                time.sleep(ADSL_ERROR_CYCLE)


if __name__ == '__main__':
    sender = Sender()
    sender.adsl()

成功实例:

调用 IP

使用只需要把存活的IP 提取出来即可

from redis import StrictRedis

redis_host = ''
redis_port = 6379
redis_password = ''

redis = StrictRedis(host=redis_host, password=redis_password, port=redis_port, db=15)
print(redis.keys())

至于 flak 方案也是 类似的 只需要 设置一个字典映射即可完成

以上便是 IP  池搭建的其中一种方案,大家可以作为 参考,还有一种方案是将自己的 后台服务器 或者手机 当作 代理IP 使用,这个方法 等下一篇文章再进行分享

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渊季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值