使用Python实现批量ping操作方法
在日常的工作中,我们通常会有去探测目标主机是否存活的应用场景,单个的服务器主机可以通过计算机自带的DOS命令来执行,但是业务的存在往往不是单个存在的,通常都是需要去探测C段的主机(同一个网段下的存活主机),这样使用DOS来进行操作是不可取,探测的速度太慢了,不满足实际需要。一般批量的操作需要使用脚本进行一键部署执行,本文主要通过使用Python语言来实现批量ping的操作(使用多线程实现Python批量处理)
Python版本:Python3
使用的第三方库:subprocess,logging,threading,queue
日志导出模块功能:
defset_logging_format():
logging.basicConfig(level=logging.INFO,
format='%(message)s',
filename='ping_host.log',
filemode='w'
)
console=logging.StreamHandler()
console.setLevel(logging.INFO)
formatter=logging.Formatter('%(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
多线程实现批量操作:
threads=[]
THREAD_NUM=20
user_iput=input('pleaseinputmodren:')
ifuser_iput=='addr':
IP_L=IP_LIST
ifuser_iput=='file':
IP_L=IP_QUEUE
foriinrange(THREAD_NUM):
t=threading.Thread(target=ping_IP,args=(IP_L,))
threads.append(t)
foriinrange(THREAD_NUM):
threads[i].start()
foriinrange(THREAD_NUM):
threads[i].join()
完整代码部分:
importsubprocess
importlogging
importdatetime
importtime
importthreading
fromqueueimportQueue
importsys
#实现日志导出
defset_logging_format():
logging.basicConfig(level=logging.INFO,
format='%(message)s',
filename='ping_host.log',
filemode='w'
)
console=logging.StreamHandler()
console.setLevel(logging.INFO)
formatter=logging.Formatter('%(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
#将需要ping连接的IP加入队列
definsert_ip_queue(ip_list_path):
IP_QUEUE=Queue()
withopen(ip_list_path,'r')asf:
foripinf.readlines():
IP_QUEUE.put(ip)
f.close()
returnIP_QUEUE
defIP_list():
ip_list=Queue()
foriinrange(1,255):
ip='192.168.1.'+str(i)
ip_list.put(ip)
returnip_list
#print(IP_list())
#print(IP_list())
#定义ping函数
defping_IP(IP_QUEUE):
whilenotIP_QUEUE.empty():
ip=IP_QUEUE.get().strip('\n')
#print(ip)
res=subprocess.call('ping-w1000-n1%s'%ip,stdout=subprocess.PIPE,shell=True)
#print(res)
ifres==0:
h=subprocess.getoutput('ping'+''+ip)
#print(h)
if'TTL='inh:
res=('网络可以正常连通平均延时=%s'%h.split('平均=')[1])
else:
res='网络连接失败!'
today=datetime.datetime.now().strftime("%Y-%m-%d%H:%M:%S")
logging.info("%sIP=%s%s"%(today,ip,res))
defmain():
set_logging_format()
ip_list_path='./hostip.txt'
IP_QUEUE=insert_ip_queue(ip_list_path)
IP_LIST=IP_list()
threads=[]
THREAD_NUM=20
user_iput=input('pleaseinputmodren:')
ifuser_iput=='addr':
IP_L=IP_LIST
ifuser_iput=='file':
IP_L=IP_QUEUE
foriinrange(THREAD_NUM):
t=threading.Thread(target=ping_IP,args=(IP_L,))
threads.append(t)
foriinrange(THREAD_NUM):
threads[i].start()
foriinrange(THREAD_NUM):
threads[i].join()
if__name__=='__main__':
main()
到此这篇关于使用Python实现批量ping操作的文章就介绍到这了,更多相关使用Python实现批量ping操作内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!