0.前言
由于都是发自己的文章,所以也不会有那么多的内容发布,一周可能也就更新个两篇,如果工作忙,可能一周就一篇,但是文章都会很细致,暂时只更新学习笔记,至于挖洞思路,小菜鸟还不配。
0.1.免责声明
传播、利用本公众号剁椒鱼头没剁椒所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号剁椒鱼头没剁椒及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
0.2.其它
部分文章由于之前授权给其它公众号发布,所以有些并未加入相关的系列中,还请到历史文章中查看,尤其是提取方面的文章。
由于不少朋友和我说使用CSDN看文章不方便,有时候设置粉丝阅读后还需要登陆账户,所以这里我准备了一个公众号,会陆续将文章同步过来,期间可能也会发一些其它内容。
文章内容太多不适合使用手机观看,手机只适合用来点赞😀
内容同步于CSDN:剁椒鱼头没剁椒
内容同步于Github:https://github.com/djytmdj/Network-security-study-notes
1. 前言
最近需要ping
地址,还是挺多的,就使用python
搞一个ping
脚本,记录一下,以免丢失了。
2. 脚本介绍
首先检查是否存在True.txt
或False.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
分钟。
2.1. 文件夹内容
文件夹中,False.txt
和True.txt
这两个文件是不需要创建的,程序会自动创建,但是IP.txt
是需要创建的,同时需要创建在程序的当前目录下,在放置IP
地址,每行一个,正常回车换行,或者在表格中弄好,直接复制过来。
每次执行只需要替换IP.txt
中的IP
地址就可以了。
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()
原文始发于微信公众号(剁椒鱼头没剁椒):多线程并发Ping脚本
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论