代理池搭建优化-(书接上回,优化改进)

炮台有效炮弹实现

声明
学习视频来自 B 站UP主泷羽sec,如涉及侵权马上删除文章。

笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。

✍🏻作者简介:致力于网络安全领域,目前作为一名学习者,很荣幸成为一名分享者,最终目标是成为一名开拓者,很有趣也十分有意义
🤵‍♂️ 个人主页: @One_Blanks
欢迎评论 💬点赞👍🏻 收藏 📂加关注+

  • 关注总部:泷羽Sec

先对Zmap下来的代理IP筛一遍

  • 使用多线程优化了验证效率,使用多个验证URL提高可用性

最新python脚本
经过多线程、线程锁的进一步优化,大大提高了验证效率。

因为我用Zmap使用了80、443端口,所以我使用了替换逗号的一个函数,如果是IP:PORT

的形式直接将 replace_comma_with_colon 函数注释。

import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
import threading

# 指定输入和输出文件路径
raw_input_file = 'raw_ips.txt'  # 原始包含逗号的IP文件
processed_output_file = 'ip.txt'  # 替换逗号后的IP文件
available_proxy_file_path = 'InProxyPool.txt'  # 可用代理输出文件

# 多个验证URL,包含国内和国外常见网站,用于更严格地验证代理IP是否可用
test_urls = [
    'http://www.baidu.com',
    'http://www.jd.com/',
    'http://www.taobao.com/'
]

# 线程锁
lock = threading.Lock()
# 标记是否是第一次写入可用代理文件,初始化为True表示第一次
first_write = True

def replace_comma_with_colon(input_file, output_file):
    """
    替换文件中逗号为冒号,并保存到新文件。
    """
    with open(input_file, 'r') as file:
        lines = file.readlines()

    # 替换逗号为冒号
    modified_lines = [line.replace(',', ':').strip() for line in lines]

    # 写入新的文件,'w'模式会自动清空原有内容再写入
    with open(output_file, 'w') as file:
        for line in modified_lines:
            file.write(line + '\n')

    print(f"IP格式处理完成,结果已保存到 {output_file}")

def test_proxy(proxy):
    """
    测试单个代理IP是否可用,通过多个URL验证,只有全部验证通过才认定可用,并实时写入文件。
    """
    global first_write
    proxy = proxy.strip()  # 移除行尾的换行符
    if not proxy:  # 跳过空行
        return None

    # 设置代理
    proxies_dict = {
        'http': f'http://{proxy}',
        'https': f'https://{proxy}'
    }
    is_available = True
    for url in test_urls:
        try:
            # 发送请求,设置超时时间为5秒
            response = requests.get(url, proxies=proxies_dict, timeout=5)
            if response.status_code!= 200:
                is_available = False
                break
        except requests.RequestException as e:
            is_available = False
            break

    if is_available:
        print(f'代理IP {proxy} 可用')
        with lock:
            # 根据是否第一次写入来决定文件打开模式
            mode = 'w' if first_write else 'a'
            with open(available_proxy_file_path, mode) as file:
                file.write(f'{proxy}\n')
            if first_write:
                first_write = False  # 第一次写入后标记设为False
        return proxy
    else:
        print(f'代理IP {proxy} 不可用')
    return None

def main():
    # 第一步:处理IP文件
    replace_comma_with_colon(raw_input_file, processed_output_file)

    # 第二步:读取替换后的IP文件,验证代理IP
    with open(processed_output_file, 'r') as file:
        proxies = file.readlines()

    # 使用ThreadPoolExecutor并发执行
    with ThreadPoolExecutor(max_workers=20) as executor:
        future_to_proxy = {executor.submit(test_proxy, proxy): proxy for proxy in proxies}
        for future in as_completed(future_to_proxy):
            proxy = future_to_proxy[future]
            try:
                future.result()  # 触发验证逻辑
            except Exception as e:
                print(f'代理IP {proxy} 验证过程中出现错误: {e}')

    print(f"\n代理验证完成,可用代理IP已写入文件: {available_proxy_file_path}")

if __name__ == "__main__":
    main()
  • 验证之后形成第一代理池,但是用到目标网站还是会有许多其他的状态码,不能访问的错误,所以我们针对目标指定网站再进行筛选

子弹有效化

  • 使用这个脚本指定目标网站为验证网站,还可以指定其Response数据包的长度,来决定确实是正常访问。
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
import threading

# 最小响应包长度
MIN_LENGTH = 100
# 最大线程数
MAX_WORKERS = 100
# 输出文件路径
OUTPUT_FILE_PATH = 'FProxies.txt'
# 输入文件路径
input_file_path = 'InProxyPool.txt'

def check_proxy(proxy):
    """验证代理网址"""
    test_url = "http://www.google.com"
    proxies = {"http": f"http://{proxy}", "https": f"http://{proxy}"}
    try:
        response = requests.get(test_url, proxies=proxies, timeout=2)
        if response.status_code == 200 and len(response.content) >= MIN_LENGTH:
            return proxy  # 返回可用代理
    except Exception:
        pass
    return None  # 无效代理

def validate_proxy(proxy, lock):
    """验证单个代理并写入文件"""
    valid_proxy = check_proxy(proxy)
    if valid_proxy:
        with lock:
            with open(OUTPUT_FILE_PATH, 'a') as outfile:
                outfile.write(f"{valid_proxy}\n")
        print(f"有效代理: {valid_proxy}")
    else:
        print(f"无效代理: {proxy}")

def validate_proxies_from_file(input_file_path):
    """从文件中读取代理并验证其有效性,同时将有效代理输出到另一个文件"""
    lock = threading.Lock()
    with open(input_file_path, 'r') as infile:
        proxies = [line.strip() for line in infile]

    with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
        futures = [executor.submit(validate_proxy, proxy, lock) for proxy in proxies]
        for future in as_completed(futures):
            future.result()  # 等待所有任务完成


validate_proxies_from_file(input_file_path)

  • 筛选出来的就全是有效的代理了,然后直接字典开轰

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光伏业务管理系统能解决光伏企业什么问题?

随着技术进步和市场规模的扩大,光伏企业面临着日益复杂的管理挑战,包括但不限于项目监管、运维管理、供应链优化、客户管理以及数据分析决策等方面。为了解决这些挑战,光伏业务管理系统应运而生,成为提升光伏企业运营效率、降低成…

【UE5】在材质中计算模型在屏幕上的比例

ViewProperty节点有很多有意思的变量 例如用 ViewProperty 的 tan ⁡ ( FOV / 2 ) \tan(\text{FOV} / 2) tan(FOV/2) 输出,用它计算模型占屏幕的比例。 (常用于for运算的次数优化,也可以用于各种美术效果) ScaleOnScreen Obje…

2024年人工智能技术赋能网络安全应用测试:广东盈世在钓鱼邮件识别场景荣获第三名!

近期,2024年国家网络安全宣传周“网络安全技术高峰论坛主论坛暨粤港澳大湾区网络安全大会”在广州成功举办。会上,国家计算机网络应急技术处理协调中心公布了“2024年人工智能技术赋能网络安全应用测试结果”。结果显示,广东盈世计算机科技有…

spring @Async

讨论一下 spring boot 下 使用 spring 异步执行的注解 先看下这个类: 这个类是 spring boot auto configure 下完成 TaskExecutor的自动配置。 1. 需要在类路径存在 ThreadPoolTaskExecutor,这个类是 是spring context模块下的类,也就是 需…

搜维尔科技:多画面显示3D系统解决方案,数据孪生可视化大屏3D展示技术

集成多画面系统 集成多画面系统解决方案 1.适合多个用户的紧凑型入门级解决方案 2.会议室功能、审批功能、3D模型讨论等多种使用可能性 3.配有组合设备,方便整合 CAVE 多画面显示系统 1.专业的大屏幕多画面解决方案 2.墙壁、天花板和地板三面CAVE 3.专为沉浸…

linux从0到1——shell编程7

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

数据科学与SQL:组距分组分析 | 区间分布问题

目录 0 问题描述 1 数据准备 2 问题分析 3 小结 0 问题描述 绝对值分布分析也可以理解为组距分组分析。对于某个指标而言,一个记录对应的指标值的绝对值,肯定落在所有指标值的绝对值的最小值和最大值构成的区间内,根据一定的算法&#x…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。 主要特性 易于部署,提供四种部署方式,包括Standalone、Cluster、Docker和…

使用 前端技术 创建 QR 码生成器 API1

前言 QR码(Quick Response Code)是一种二维码,于1994年开发。它能快速存储和识别数据,包含黑白方块图案,常用于扫描获取信息。QR码具有高容错性和快速读取的优点,广泛应用于广告、支付、物流等领域。通过扫…

Hash table类算法【leetcode】

哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素 那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。 例如要查询一个名字是否在这所学校里。 要枚举的话时间复杂度是O(n),但如果使用哈希…

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM? POM是PageObjectModule(页面对象模式)的缩写,其目的是为了Web UI测试创建对象库。在这种模式下,应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?

大家好,我是锋哥。今天分享关于【Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的?】面试题。希望对大家有帮助; Elasticsearch客户端在和集群连接时,如何选择特定的节点执行请求的? 100…

Python数据结构day2

一、链表 1.1目的 解决顺序表存储数据有上限,并且插入和删除操作效率低的问题 1.2概念 链表:链式存储的线性表,使用随机物理内存存储逻辑上连续的数据 链表的组成:由一个个结点组成 结点:由数据域和链接域组成&a…

【经纬度转地址实现方案】根据给定的经纬度,查询对应城市,通过建立经纬度geohash-行政区映射表,实现快速查询

文章目录 背景目标方案设计:表结构设计:方案实现1.高德API获取行政区边界点2.外包矩形中心作为中心点3.坐标点经纬度转换为geohash 测试建表语句测试造数测试用例测试结果 总结总结 背景 最近遇到一个需求,需要查询给定的经纬度坐标点&#…

解锁业务成功:大数据和 AI 如何协作以释放战略洞察

在当今这个数据主导的时代,大数据与AI的协同作用对于寻求竞争优势的组织而言愈发关键。大数据以其庞大的数据量、多样化的数据类型以及高速的数据生成能力,为AI算法提供了丰富的原材料,助力其挖掘出有价值的洞见,推动明智决策的制…

LINUX系统编程之——环境变量

目录 环境变量 1、基本概念 2、查看环境变量的方法 三、查看PATH环境变量的內容 1)不带路径也能运行的自己的程序 a、将自己的程序直接添加到PATH指定的路径下 b、将程序所在的路径添加到PATH环境中 四、环境变量与本地变量 1、本地变量创建 2、环境变量创…

QT:QListView实现table自定义代理

介绍 QListVIew有两种切换形式,QListView::IconMode和QListView::ListMode,通过setViewMode()进行设置切换。因为QListView可以像QTreeView一样显示树形结构,也可以分成多列。这次目标是将ListView的ListMode形态显示为table。使用代理&…

IDEA2023 创建SpringBoot项目(一)

一、Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 二、快速开发 1.打开IDEA选择 File->New->Project 2、…

初级数据结构——树

目录 前言一、树的基本概念二、二叉树三、树的表示方法四、树的遍历树的代码模版五、经典例题[2236. 判断根结点是否等于子结点之和](https://leetcode.cn/problems/root-equals-sum-of-children/description/)代码题解 六、总结结语 前言 从这一期开始数据结构开始有那么一点…

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失

Unity 编辑器下 Android 平台 Addressable 加载模型粉红色,类似材质丢失 Addressable Play Mode Script加载模式 选择 Use Existiing Build 1.Unity 切换到 PC 平台,执行 Addressable Build 运行,加载 bundle 内的预制体 显示正常 2.Unit…