多线程并发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.hqwc.cn/news/258783.html

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

相关文章

docker的资源控制

docker容器的资源控制 Docker通过Cgroup 来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。Cgroup 是ControlGroups的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(…

自学网络安全的三个必经阶段(含学习笔记)

学习网络安全技术的方法无非三种: 第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内…

12.8 作业 C++

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

一篇文章带你快速入门 Nuxt.js 服务端渲染

1. Nuxt.js 概述 1.1 我们一起做过的SPA SPA(single page web application)单页 Web 应用,Web 不再是一张张页面,而是一个整体的应用,一个由路由系统、数据系统、页面(组件)系统等等&#xff0…

HbuilderX使用Uniapp+Vue3安装uview-plus

如果你是vue2版本想使用uniapp去配置uviewui库可以参考之前的文章 小程序的第三方ui库推荐较多的还是uview的,看起来比较美观,功能也比较完善,下面将提一下Vue3安装uview-plus库的教程 创建项目 安装 首先进入官网 uView-Plus 直接下载并导…

Spring全面详解

目录 1. Spring 概述 1.1 Spring是什么 1.2 Spring的作用 1.3 Spring IoC是什么 2. Spring 快速入门 3. Spring Bean 3.1 的实例化方式 空参构造器 3.2 的属性注入 全参构造器注入 setter方法注入 策略模式 3.3 注解管理 3.4 注解方式的属性注入 1. Spring 概述 …

Spring框架学习:Bean生命周期

目录 SpringBean的生命周期 Bean实例属性填充 三级缓存 常用的Aware接口 Spring IoC容器实例化Bean总结 SpringBean的生命周期 Spring Bean的生命周期是从 Bean 实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到…

int(1) 和 int(10) 的区别

int(1) 和 int(10) 的区别 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单alter table xxx ADD user_id int(1)。领导看到我的sql工单,于是说:这int(1)怕是不够用吧,接…

12.8作业

1. 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是…

批量AI人工智能写作软件下载【2024最新】

在当今数字化的浪潮中,人工智能技术为各行各业带来了颠覆性的变革。其中,AI在文案创作领域的应用尤为引人瞩目,而批量AI人工智能写作更是成为文案创作者们关注的热点。本文将深入探讨批量AI人工智能写作的概念、其在不同领域的应用&#xff0…

C语言搭建项目-学生管理系统(非链表)

、 目录 搭建offer.h文件 搭建offer.c中的main函数 密码登入系统 搭建my_oferr.c中的接口函数 使用帮助菜单接口函数 增加学生信息接口函数 查询学生信息接口函数 删除学生信息接口函数 保存学生信息接口 打开文件fopen 关闭文件fclose 判断是否保存文件fwrite 退出执行文件…

联想王传东:重磅发布“AI PC先锋行动” 2024开启AI PC元年

发布 | 大力财经 “这样一场变革浪潮,需要充满想象力和创造力的人去推动,作为全栈智能领导厂商和全球PC第一品牌,我们将率先启动联想AI PC先锋行动,与AI PC生态先锋和创意先锋共同开启一起联想AI PC系列活动,不负AI&a…