python 多线程ping_python实现 多线程ping扫描网段中的在线主机

近日因为施工单位进度太慢,导致工期超出预估。领导对此比较重视,让我有空就要看一下完成的进度并汇报。我首先想到的是使用ping命令,但是手工ping了几个,然后就干不下去了(太累了)。这个必须要自动化进行,而我选择使用python来实现。

我写了一个脚本:使用while循环,依次ping网络中的每个节点,并将结果保存到文件中(代码如下)。但是此方法耗时太久!

a=1 #定义a=1

while a<255: #当a<255时 循环执行

b='192.168.1.'+str(a) #b代表ip地址

ret = os.system('ping '+b+' -n 1 ') #每个ip只ping一次

if ret:

os.system('echo '+b+'>>d:\\res2.txt') #如果执行结果不为0, 将ip 放入文件res2.txt

else:

os.system('echo '+b+'>>d:\\res.txt') #否则放入res.txt

a=a+1

为了节约我虽然不能称之为宝贵的时间,我将此段代码进行了改造:

1、采用多线程,先是用了3个线程,最后使用了5个线程

2、不在将结果写入文件,只在标准输出上显示

3、使用linux系统

#!/usr/bin/env python

#coding:utf-8

import os

import time

import threading #引入

class pings(threading.Thread): #定义线程主体部分

def __init__(self,num,interval):

threading.Thread.__init__(self)

self.nums=num #起始数

self.inter=interval #步长

self.thread_stop=False #线程是否停止

self.ns=0 #单线程计数

def run(self):

start=self.nums

while start<254 and not self.thread_stop:

ret=os.system('ping -c 1 -W 1 192.168.1.%d >/dev/null' % start)

if not ret:

print 'ping 192.168.1.%d ok' % start

self.ns +=1

start+=self.inter

print '线程%d结束, ' % self.nums ,

print '此线程共获得 %d 个在线数据' % self.ns

def stop(self):

self.thread_stop=True

def pingt():

thread1=pings(1,5)

thread2=pings(2,5)

thread3=pings(3,5)

thread4=pings(4,5)

thread5=pings(5,5)

thread1.start()

thread2.start()

thread3.start()

thread4.start()

thread5.start()

time.sleep(55)

thread1.stop()

thread2.stop()

thread3.stop()

thread4.stop()

thread5.stop()

if __name__=='__main__':

pingt()

如下是我对公网上的地址段202.102.201.0/24 进行ping测试的结果,总共得到了29个在线的ip地址。

1fa0287b2662c84203ef84a836b69404.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值