多线程并发Ping脚本

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.mzph.cn/news/207694.shtml

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

相关文章

CSS——sticky定位

1. 大白话解释sticky定位 粘性定位通俗来说,它就是相对定位relative和固定定位fixed的结合体,它的触发过程分为三个阶段 在最近可滚动容器没有触发滑动之前,sticky盒子的表现为相对定位relative【第一阶段】, 但当最近可滚动容…

【MATLAB】tvfEMD信号分解+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 TVFEMDFFTHHT组合算法是一种结合了总体变分模态分解(TVFEMD)、傅里叶变换(FFT)和希尔伯特-黄变换(HHT)的信号分解方…

电子学会C/C++编程等级考试2021年06月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字变换 给定一个包含5个数字(0-9)的字符串,例如 “02943”,请将“12345”变换到它。 你可以采取3种操作进行变换 1. 交换相邻的两个数字 2. 将一个数字加1。如果加1后大于9,则变为0 3. 将一个数字加倍。如果加倍后大于…

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

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

嵌入式杂记 - MDK的Code, RO-data , RW-data, ZI-data意思

嵌入式杂记 - Keil的Code, RO-data , RW-data, ZI-data意思 MDK中的数据分类MCU中的内部存储分布MDK中数据类型存储Code代码段例子 RO-data 只读数据段例子 RW-data 可读写数据段例子 ZI-data 清零数据段例子 在嵌入式开发中,我们经常都会使用一些IDE,例…

Hadoop学习笔记(HDP)-Part.17 安装Spark2

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Web前端 ---- 【Vue】Vuex的使用(辅助函数、模块化开发)

目录 前言 Vuex是什么 Vuex的配置 安装vuex 配置vuex文件 Vuex核心对象 actions mutations getters state Vuex在vue中的使用 辅助函数 Vuex模块化开发 前言 本文介绍一种新的用于组件传值的插件 —— vuex Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态…

【ArcGIS Pro微课1000例】0053:基于SQL Server创建与启用地理数据库

之前的文章有讲述基于SQL Server创建企业级地理数据库,本文讲述在SQL Server中创建常规的关心数据库,然后在ArcGIS Pro中将其启用,转换为企业级地理数据库。 1. 在SQL Server中创建数据库** 打开SQL Server 2019,连接到数据库服务器。 展开数据库连接,在数据库上右键→新…

(四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介: 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法(TTA&#xf…

基于SSH的java记账管理系统

基于SSH的java记账管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 项目类型:Java EE项目 项目名称:基于SSH的记账管理系统 项目架构:B/S架构 开发语言:Java语言 前端技术:HTML、CS…

初识优先级队列与堆

1.优先级队列 由前文队列queue可知,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,在此情况下,使用队列queue显然不…

git常用命令指南

目录 一、基本命令 1、创建分支 2、切换分支 3、合并分支 4、初始化空git仓库 二、文件操作 1、创建文件 2、添加多个文件 3、查看项目的当前状态 4、修改文件 5、删除文件 6、提交项目 三、实际操作 1、创建目录 2、进入新目录 3、初始化空git仓库 4、创建文…

C++STL的string模拟实现

文章目录 前言string的成员变量成员函数构造函数拷贝构造赋值重载 模拟实现string各种接口print迭代器普通迭代器const迭代器 string比较大小push_backinsert 和 eraseinserterase reserve和resizereserveresize swapfindcout和cincoutcin 前言 今天要讲string的底层实现&…

总线(什么是南北桥?您都用过哪些总线?)

什么是总线? 计算机系统中的总线(Bus)是指计算机设备和设备之间传输信息的公共数据通道,是连接计算机硬件系统内多种设备的通信线路,它的一个重要特征是由总线上的所有设备共享,因此可以将计算机系统内的多…

python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了,感兴趣的话可以自行移步阅读: 《移动端轻量级模型开发谁更胜一筹,efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

Vue 核心 数据监听 computed | watch

Vue 核心 数据监听 computed | watch 一、今日学习目标 1.指令补充 指令修饰符v-bind对样式增强的操作v-model应用于其他表单元素 2.computed计算属性 基础语法计算属性vs方法计算属性的完整写法成绩案例 3.watch侦听器 基础写法完整写法 4.综合案例 (演示&…

selenium 解决 id定位、class定位中,属性值带空格的解决办法

一、前置说明 selenium遇到下面这种元素&#xff1a; <th id"demo id" class"value1 value2 value3 ">1、虽然id一般不会有空格&#xff0c;但是前端错误的这种写法(如下图)&#xff0c;会造成使用id定位不到元素&#xff0c;如&#xff1a; find…

IOday6作业

1>使用有名管道&#xff0c;完成两个进程的相互通信 //create.c #include<myhead.h>int main(int argc, const char *argv[]) {if((mkfifo("myfifo1",0664)) -1){perror("mkfifo");return -1;}if((mkfifo("myfifo2",0664)) -1){perror…

MYSQL练题笔记-高级查询和连接-这系列最后一题以及下个系列(子查询)的第一题

今天做了下面两题&#xff0c;到第三题的时候想了下但是没有太多的思路&#xff0c;然后看题解的时候实在是觉得自己不会&#xff0c;打算明天看吧。 1.按分类统计薪水相关的表和题目如下 我是想着简化问题&#xff0c;先找出薪水低于30000的员工&#xff0c;然后找这些员工的上…

JAVA 锁

乐观锁 乐观锁是一种乐观思想&#xff0c;即认为读多写少&#xff0c;遇到并发写的可能性低&#xff0c;每次去拿数据的时候都认为别人不会修改&#xff0c;所以不会上锁&#xff0c;但是在更新的时候会判断一下在此期间别人有没有去更新这个数据&#xff0c;采取在写时先读出…