信息收集ip测活-Python脚本编写

embedded/2024/11/25 18:35:37/

编写一个python脚本,下面为实现的功能点:
    文件读取与IP提取:读取指定文件夹下的所有txt文件,提取其中的IP地址。
    端口号添加:为每个IP地址添加多个指定的端口号。
    测活功能:使用socket库进行连接测试,判断IP:端口号是否存活。
    多个验证URL,包含国内和国外常见网站,用于更严格地验证代理IP是否可用,
    结果保存:将存活的IP:端口号组合保存到新的txt文件中。
    测活过程展示:在测活过程中,实时展示每一条测活的结果。
    强制终止:设置一个信号处理机制,允许用户强制终止脚本。
    多线程/多进程:使用多线程或多进程技术提高并发处理能力。
    结果保存:将存活的IP:端口号组合保存到新的txt文件中。
 

python">文件读取与IP提取
首先,我们需要读取指定文件夹下的所有txt文件,并从中提取IP地址。可以使用Python的os模块来遍历文件夹,re模块来提取IP地址。import os 
import re def extract_ips_from_files(folder_path): ip_pattern = re.compile(r'\b(?:\d{1,3}\.){3}\d{1,3}\b')  ips = [] for filename in os.listdir(folder_path):  if filename.endswith('.txt'):  with open(os.path.join(folder_path,  filename), 'r') as file: content = file.read()  ips.extend(ip_pattern.findall(content))  return ips 端口号添加
为每个IP地址添加多个指定的端口号。def add_ports_to_ips(ips, ports): ip_port_pairs = [(ip, port) for ip in ips for port in ports] return ip_port_pairs 测活功能
使用socket库进行连接测试,判断IP:端口号是否存活。import socket def is_ip_port_alive(ip, port): try: with socket.socket(socket.AF_INET,  socket.SOCK_STREAM) as s: s.settimeout(2)  s.connect((ip,  port)) return True except (socket.timeout,  ConnectionRefusedError): return False 多个验证URL
包含国内和国外常见网站,用于更严格地验证代理IP是否可用。import requests def validate_proxy_with_url(ip, port, url): proxies = { 'http': f'http://{ip}:{port}', 'https': f'http://{ip}:{port}' } try: response = requests.get(url,  proxies=proxies, timeout=5) return response.status_code  == 200 except requests.RequestException: return False 结果保存
将存活的IP:端口号组合保存到新的txt文件中。python
复制
def save_results(results, output_file): with open(output_file, 'w') as file: for ip, port in results: file.write(f'{ip}:{port}\n')  测活过程展示
在测活过程中,实时展示每一条测活的结果。def display_live_results(ip, port, is_alive): status = 'Alive' if is_alive else 'Dead' print(f'Testing {ip}:{port} - {status}') 强制终止
设置一个信号处理机制,允许用户强制终止脚本。import signal 
import sys def signal_handler(sig, frame): print('Script terminated by user.') sys.exit(0)  signal.signal(signal.SIGINT,  signal_handler) 多线程/多进程
使用多线程或多进程技术提高并发处理能力。
from concurrent.futures  import ThreadPoolExecutor def test_ip_port_pairs(ip_port_pairs, urls): alive_pairs = [] with ThreadPoolExecutor(max_workers=10) as executor: futures = [] for ip, port in ip_port_pairs: futures.append(executor.submit(is_ip_port_alive,  ip, port)) for (ip, port), future in zip(ip_port_pairs, futures): is_alive = future.result()  display_live_results(ip, port, is_alive) if is_alive: for url in urls: if validate_proxy_with_url(ip, port, url): alive_pairs.append((ip,  port)) break return alive_pairs 主函数
将以上功能整合到主函数中。def main(): folder_path = 'path/to/your/folder' output_file = 'alive_proxies.txt'  ports = [80, 443, 8080] urls = ['http://www.google.com',  'http://www.baidu.com']  ips = extract_ips_from_files(folder_path) ip_port_pairs = add_ports_to_ips(ips, ports) alive_pairs = test_ip_port_pairs(ip_port_pairs, urls) save_results(alive_pairs, output_file) if __name__ == '__main__': main() 


http://www.ppmy.cn/embedded/140457.html

相关文章

深入探索JMeter的执行器时间线:从CLArgsParser到JmeterEngine

引言 Apache JMeter是一款广泛使用的开源性能测试工具,它允许用户对各种服务进行负载测试。然而,了解其内部工作机制对于优化测试计划和提高测试效率至关重要。本文将深入探讨JMeter的执行器时间线,包括CLArgsParser、HashTree、StandardJme…

C语言:深入理解指针

一.内存和地址 我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是 8GB/16GB/32GB 等,那这些内存空间…

【机器学习】超简明Python基础教程

Python是一种简单易学、功能强大的编程语言,适用于数据分析、人工智能、Web开发、自动化脚本等多个领域。本教程面向零基础学习者,逐步讲解Python的基本概念、语法和操作。 1. 安装与运行 安装Python 从官网 Welcome to Python.org 下载适合自己系统的…

RabbitMQ 之 死信队列

一、死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到 queue 里了,consumer 从 queue 取出消息进行…

Spring Boot与MyBatis-Plus的高效集成

Spring Boot与MyBatis-Plus的高效集成 引言 在现代 Java 开发中,MyBatis-Plus 作为 MyBatis 的增强工具,以其简化 CRUD 操作和无需编写 XML 映射文件的特点,受到了开发者的青睐。本篇文章将带你一步步整合 Spring Boot 与 MyBatis-Plus&…

shell编写——脚本传参与运算

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

leetcode_25_k个一组翻转链表

力扣:k个一组翻转链表 链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/ 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k…

数据结构进阶(C++) -- AVL树的实现

AVL树 概念 1962年,前苏联的科学家G.M.Adelson-Velsky和E.M.Landis 在论文《An algorithm for the organization of information》中发表了AVL树。AVL树是最先发明的自平衡二叉搜索树,AVL树可以是一棵空树,也可以是具备下列性质的二叉搜索树…