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

炮台有效炮弹实现

声明
学习视频来自 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 = Truedef 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_writeproxy = proxy.strip()  # 移除行尾的换行符if not proxy:  # 跳过空行return None# 设置代理proxies_dict = {'http': f'http://{proxy}','https': f'https://{proxy}'}is_available = Truefor url in test_urls:try:# 发送请求,设置超时时间为5秒response = requests.get(url, proxies=proxies_dict, timeout=5)if response.status_code!= 200:is_available = Falsebreakexcept requests.RequestException as e:is_available = Falsebreakif 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  # 第一次写入后标记设为Falsereturn proxyelse:print(f'代理IP {proxy} 不可用')return Nonedef main():# 第一步:处理IP文件replace_comma_with_colon(raw_input_file, processed_output_file)# 第二步:读取替换后的IP文件,验证代理IPwith 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:passreturn 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)
  • 筛选出来的就全是有效的代理了,然后直接字典开轰

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

odoo18中模型的常用字段类型

字段的公共属性: Char 字符类型,对应数据库中varchar类型,除了通用类型外接收另外两个参数: size: 字符长度,超出的长度将被截断 trim: 默认True,是否字段值应该被去空白。 Text 文本类型,对应数据库…

ABAP开发实战——表单打印单位输出问题

在之前的文章中有提到过ABAP开发报表程序时会出现单位显示未转化值,就是说在中文环境下,用户希望看到的单位是“套”,但是报表程序输出的确是“SUI”,这时候需要取数时添加语句进行转化,但是,最近开发表单打…

基于SpringBoot的城镇保障性住房管理系统【附源码】

基于SpringBoot的城镇保障性住房管理系统 效果如下: 系统登录页面 用户管理页面 房源信息管理页面 住房分配管理页面 公示信息页面 系统主页面 用户登陆页面 房源信息页面 研究背景 随着城市化进程的加速,住房问题一直是人们关注的焦点。为了解决低收…

Java文件上传解压

目录结构 工具类 枚举 定义文件类型 public enum FileType {// 未知UNKNOWN,// 压缩文件ZIP, RAR, _7Z, TAR, GZ, TAR_GZ, BZ2, TAR_BZ2,// 位图文件BMP, PNG, JPG, JPEG,// 矢量图文件SVG,// 影音文件AVI, MP4, MP3, AAR, OGG, WAV, WAVE}为了避免文件被修改后缀&#xff0…

IDEA 下载源码很慢,Download Source使用阿里云镜像仓库

参考: IDEA maven本地仓库、中心仓库、远程仓库配置 在观看第三方jar包的api时,有时候需要下载源码看下注释。 这个时候用idea 上的提示的Download Source会发现一直下载不下来。 因此就怀疑用的是apache的maven仓库,不是我们用的 aliyun 镜…

PostgreSQL WITH 子句:提高查询效率和可读性

PostgreSQL WITH 子句:提高查询效率和可读性 PostgreSQL 是一种功能强大的开源关系数据库管理系统,它以其稳定性、可靠性和高级功能而闻名。在 PostgreSQL 中,WITH 子句(也称为公用表表达式,CTE)是一种非常有用的特性,它允许用户在一个大的查询中创建一个临时的结果集,…

计算机网络socket编程(3)_UDP网络编程实现简单聊天室

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络socket编程(3)_UDP网络编程实现简单聊天室 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流…

设计模式-创建型-建造者模式

1.概念 建造者设计模式(Builder Design Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。 2.作用 用于简化对复杂对象的创建 3.应用场景 当我们有一个非…

英文版本-带EXCEL函数的数据分析

一、问题: 二、表格内容 三、分析结果 四、具体的操作步骤: 销售工作表公式设计与数据验证 类别(Category)列公式: 在Category列(假设为D列),根据ProductCode在Catalogue工作表中查找…

三层交换机静态路由实验

1、前置知识 2、实验目的 3、实验器材: 3560-23PS交换机2台、主机4台、交叉线1根和直通网线4根。 4、实验规划及拓扑 实验要求: (1)在交换机A和交换机B上分别划分基于端口的VLAN: 交换机 VLAN 端口成员 交换机…

PLC与PLC跨网段通讯的几种方法:厂区组网实践

PLC通常通过以太网或其他工业网络协议(如PROFINET、Modbus TCP等)进行通信。当PLC位于不同的网段时,它们不能直接通信,需要特殊的配置或设备来实现通信,不同网段的PLC通讯变得尤为重要。 随着工业网络的发展和工业4.0概…

观察者模式和订阅模式

观察者模式和订阅模式在概念上是相似的,它们都涉及到一个对象(通常称为“主题”或“发布者”)和多个依赖对象(称为“观察者”或“订阅者”)之间的关系。然而,尽管它们有相似之处,但在某些方面也…

HarmonyOs鸿蒙开发实战(20)=>一文学会基础使用组件导航Navigation

敲黑板,以下是重点技巧。文章末尾有实战项目效果截图及代码截图可参考 1.概要 Navigation是路由导航的根视图容器Navigation组件主要包含​导航页(NavBar)和子页(NavDestination),导航页不存在页面栈中&am…

Android12 的 Vold梳理

1.代码位置 system/vold/ 路径下,查看bp文件,发现是编译system/vold/main.cpp编译生成可执行文件vold 2.app侧调用代码流程 2.1 整体框架 #mermaid-svg-lqO8phN62rKNW407 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#…

DevOps-Jenkins-新手入门级

1. Jenkins概述 1. Jenkins是一个开源持续集成的工具,是由JAVA开发而成 2. Jenkins是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作 1.1 什么是代码部署 代码发布/部署>开发书写的程序代码---->部署测试/生产环境 web服务…

11.22 深度学习-pytorch自动微分

# 自动微分模块torch.autograd负责自动计算张量操作的梯度,具有自动求导功能。自动微分模块是构成神经网络训练的必要模块,可以实现网络权重参数的更新,使得反向传播算法的实现变得简单而高效 import torch # 1. **张量** # Torch中一切…

在win10下搭建ftp服务器

1 说明 本文档在win10下实现。 2 安装ftp服务器 打开“控制面板/程序和功能”,如下: 点击“启用或关闭windows功能”,如下: 安装“ftp服务器”,将下图红色圈中部分打勾,如下: 必须勾选…

数据结构C语言描述4(图文结合)--栈的实现,中序转后序表达式的实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…

对比 MyBatis 批处理 BATCH 模式与 INSERT INTO ... SELECT ... UNION ALL 进行批量插入

前言 在开发中,我们经常需要批量插入大量数据。不同的批量插入方法有不同的优缺点,适用于不同的场景。本文将详细对比两种常见的批量插入方法: MyBatis 的批处理模式。使用 INSERT INTO ... SELECT ... UNION ALL 进行批量插入。 MyBatis …

vue中路由缓存

vue中路由缓存 问题描述及截图解决思路关键代码及打印信息截图 问题描述及截图 在使用某一平台时发现当列表页码切换后点击某一卡片进入详情页后,再返回列表页时页面刷新了。这样用户每次看完详情回到列表页都得再重新输入自己的查询条件,或者切换分页到…