多线程并发Ping脚本

news2024/11/16 23:39:42

1. 前言

最近需要ping地址,还是挺多的,就使用python搞一个ping脚本,记录一下,以免丢失了。

2. 脚本介绍

首先检查是否存在True.txtFalse.txt文件,并在用户确认后进行删除,然后从IP.txt的文件中读取IP地址,然后使用多线程并发地对这些IP地址进行ping测试。根据测试结果,将可连接的IP地址写入True.txt文件,不可连接的IP地址写入False.txt文件。

IP.txt文件需要每一行为一个IP地址,不可放置网段,并且通信与不通信是暂存在列表中的,若中间结束ping,则数据会丢失,只有当全部运行完后,会一次性写入,之前也测试过一边测试一边写入,会出现频繁的读取文件和写入文件,总会出现IP丢失的情况。此次经过测试,无丢失情况。

测试环境:python3.10

测试结果:IP.txt中共计1.2011个IP地址,20线程,共计耗时32分钟。

image-20231208104023411

2.1. 文件夹内容

文件夹中,False.txtTrue.txt这两个文件是不需要创建的,程序会自动创建,而且IP.txt是需要创建的,并且放置~地址,每行一个,正常回车换行,或者在表格中弄好,直接复制过来。

每次执行只需要替换IP.txt中的IP地址就可以了。

image-20231208104342690

2.2. 脚本源码

这里电脑性能好,而且想快的话,直接多上一些线程,一开始我测试的时候,线程没设定好,直接给我干了2400多线程,电脑直接卡死,预估100多线程应该都没问题。

import threading
import subprocess
import os
from concurrent.futures import ThreadPoolExecutor

"""判断是否存在True.txt或False.txt文,由于如果之前存在可能会导致执行添加了,但是测试好像不会,不过添加一个也无妨。"""
def check_confirmation():
    if os.path.exists('True.txt') or os.path.exists('False.txt'):
        user_input = input("发现已存在的True.txt或False.txt文件,是否删除?(y/n): ")
        if user_input.lower() == 'y':
            if os.path.exists('True.txt'):
                os.remove('True.txt')
            if os.path.exists('False.txt'):
                os.remove('False.txt')
        elif user_input.lower() == 'n':
            exit()
        else:
            print("无效的输入。请输入 'y' 或 'n'。")
            check_confirmation()

def ping_ip(ip, true_ips, false_ips):
    """如果IP地址能够ping通,则将其添加到true_ips列表中;否则添加到false_ips列表中。"""
    command = ['ping', '-n', '1', ip]
    result = subprocess.call(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
    if result == 0:
        true_ips.append(ip)
        print(f"{ip} 可以ping通!")
    else:
        false_ips.append(ip)
        print(f"{ip} 无法ping通!")

def main():
    check_confirmation()
    with open('IP.txt', 'r') as file:
        ips = file.readlines()

    true_ips = []
    false_ips = []
    """控制线程,这里我写的是20线程。"""
    with ThreadPoolExecutor(max_workers=20) as executor:
        for ip in ips:
            ip = ip.strip()
            executor.submit(ping_ip, ip, true_ips, false_ips)
    """整个程序运行完将列表中的数据写入到相应的文件夹中。"""
    with open('True.txt', 'w') as file:
        for ip in true_ips:
            file.write(ip + '\n')

    with open('False.txt', 'w') as file:
        for ip in false_ips:
            file.write(ip + '\n')

if __name__ == "__main__":
    main()

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

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

相关文章

【MVP矩阵】投影矩阵推导与实现

相机空间和NDC空间示意图(来自奇乐编程学院) 相机坐标系一般都是右手坐标系, 相机朝向是 z 的负半轴 裁剪空间和NDC空间示意图 投影矩阵推导 【本文仅用于自身备忘】 正交投影推导结果如下 透视投影推导结果如下 备注 一般情况下,透…

“爆款大健康产品背后的创新营销策略“

我的朋友去年创立了一家创新型大健康产品公司,并在短短三个月内将其业务规模推到了2300万用户的高峰。你相信吗? 这位朋友是一个有着冒险精神的企业家,他并没有任何大健康产品方面的经验。他先找到了一家领先的科技公司,帮助他把他…

AZURE==SQL managed instances

创建资源 创建DB 创建完成后,拿着刚才的账号密码依然连接不上 远程连接 需要开启公网访问和开放相关端口 参考Configure public endpoint - Azure SQL Managed Instance | Microsoft Learn 连接成功

认识系统服务daemons

什么是daemon与服务(service) 常驻内存的是进程,可以提供一些系统或网络功能,这就是服务。实现service的程序称为daemon。也就是说要想提供某种服务,daemon实在后台运行的。 daemon的分类: 1)可独立启动…

编译 Android gradle-4.6-all.zip 报错问题记录

编译 Android gradle-4.6-all.zip 报错问题记录 方法一:替换资源:方法二:修改源方法三:修改版本 编译时候无法下载 gradle-4.6-all Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip 方法一&#xf…

计算机毕业设计 基于SpringBoot的高校毕业与学位资格审核系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

设计并实现一个多线程图书馆管理系统,涉及数据库操作

没有实现全部功能,希望路过的大佬,可以实现全部功能,在评论区聊聊 创建数据库library-demo CREATE DATABASE library-demo创建图书表book CREATE TABLE book (bookId int(11) NOT NULL AUTO_INCREMENT COMMENT 图书ID,bookName varchar(15)…

word一键接受所有修订并保留修订痕迹

目的:让word修订插入的内容在接受修订后保留痕迹。 文章目录 目的:让word修订插入的内容在接受修订后保留痕迹。1. 打开批注的word文件2. 同时按住:*AltF11*,然后右键:Normal -->插入--> 模块3. 在出现的代码框中…

C语言期末考试复习PTA数据类型及表达式-分支结构程序-循环结构-数组经典选择题

目录 第一章:C语言数据类型和表达式 第一题: 第二题: 第三题: 第四题: 第五题: 第六题: 第七题: 第八题: 第九题: 第二章:分支结构程序…

开发一款属于自己的校园跑腿小程序 手把手带你写同城跑腿 代取快递 代买东西 代寄快递 含骑手端 管理员端 用户端 校园圈子论坛

今天开始带大家开发一款属于自己的校园跑腿同城跑腿小程序。 第一章讲技术点和效果图,如果你看完效果图觉得不错,可以认真跟着石头哥学习。 第二章教大家如何快速部署项目,如果你只是为了部署源码只需要学习第二章即可。 第三章开始就是带着…

【Java 基础】25 比较器

文章目录 1.什么是比较器2.比较器的种类1)Comparable2)Comparator4)组合比较器 总结 1.什么是比较器 比较器是用于对对象进行比较的工具 比较器允许开发者定义对象之间的顺序,使得排序和比较操作更加灵活。 还记得我们之前学的数…

SpringAOP专栏二《原理篇》

上一篇SpringAOP专栏一《使用教程篇》-CSDN博客介绍了SpringAop如何使用,这一篇文章就会介绍Spring AOP 的底层实现原理,并通过源代码解析来详细阐述其实现过程。 前言 Spring AOP 的实现原理是基于动态代理和字节码操作的。不了解动态代理和字节码操作…

Sql Server Management Studio连接Mysql

目标 已知mysql连接参数(地址和用户),期望通过Microsoft Sql Server Management Studio (以下简称MSSSMS)连接Mysql,在MSSSMS中直接查询或修改Mysql中的数据。 下载MySql Connector/ODBC并安装&#xff0c…

Python configparser 模块:优雅处理配置文件的得力工具

更多资料获取 📚 个人网站:ipengtao.com 配置文件在软件开发中扮演着重要的角色,而Python中的 configparser 模块提供了一种优雅而灵活的方式来处理各种配置需求。本文将深入介绍 configparser 模块的各个方面,通过丰富的示例代码…

力扣(LeetCode)-1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

一个简单的 postman设置接口关联让我措施了大厂的机会

postman设置接口关联 在实际的接口测试中,后一个接口经常需要用到前一个接口返回的结果, 从而让后一个接口能正常执行,这个过程的实现称为关联。 在postman中实现关联操作的步骤如下: 1、利用postman获取上一个接口指定的返回值…

好莱坞明星识别

一、前期工作 1. 设置GPU from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as plt import tensorflow as tfgpus tf.config.list_physical_devices("GPU")if gpus:gpu0 …

mybatis数据输出-使用resultMap标签定义实体类属性和数据库字段对应关系,再在SQL语句中引用这个对应关系

有三种方式实现实体类属性和数据库字段对应关系 起别名对应&#xff0c;将字段的别名设置成和实体类属性一致全局配置自动识别驼峰式命名规则&#xff0c;在Mybatis全局配置文件加入配置 <setting name"mapUnderscoreToCamelCase" value"true"/>使用…

Pipenv环境配置+Pytest运行

环境配置 使用Pipenv进行虚拟环境管理&#xff0c;Pipfile为依赖模块管理文件。 安装pipenv&#xff1a;brew install pipenv根项目根目录下执行命令创建虚拟环境&#xff1a; pipenv install在Pycharm中指定项目运行的虚拟环境 &#xff1a;File->Settings->Project:-…

16mic圆形麦克风阵列电路与声源定位算法设计

16mic圆形麦克风阵列电路与声源定位算法设计 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送语音信号处理降噪算法&#xff0c;蓝牙耳机音频&#xff0c;DSP音频项目核心开发资料, 1 实…