当前位置: 首页 > article >正文

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

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

文件读取与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.kler.cn/a/409383.html

相关文章:

  • Charles抓包工具-笔记
  • Linux:自定义Shell
  • 冒泡排序(Java)
  • ES6 、ESNext 规范、编译工具babel
  • 问:Spring Boot应用监控组件工具,梳理一下?
  • windows C#-取消任务列表(上)
  • Java零拷贝一步曲——Linux 中的零拷贝技术
  • C++ Qt 识别U盘/串口
  • 传输控制协议(TCP)和用户数据报协议(UDP)
  • ODBC连接PostgreSQL数据库后,网卡DOWN后,客户端进程阻塞问题解决方法
  • 无法加载文件 C:\dev\nodejs\cnpm.ps1,因为在此系统上禁止运行脚本。问题解决
  • 用java和redis实现考试成绩排行榜
  • RabbitMQ 之 死信队列
  • 基于Python Web的社区爱心养老管理系统设计与实现
  • Mysql的加锁情况详解
  • [ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
  • VUE3 默认下载某个文件
  • 蓝桥杯嵌入式再学习理解
  • MySQL中索引全详解
  • windows C#-异步文件访问
  • python 什么是数据类dataclass,以及它的应用场景
  • 论文阅读--Evidence for the utility of quantum computing before fault tolerance
  • 跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)
  • 人工智能之机器学习5-回归算法2【培训机构学习笔记】
  • 【Rabbitmq篇】RabbitMQ⾼级特性----持久性,发送⽅确认,重试机制
  • Kafka 生产者优化与数据处理经验