shell版本
#!/bin/bash
m=0
for i in `seq 1 255`
do
ping -c 1 192.168.1.${i} >/dev/null
if [ $? -eq 0 ]
then
echo 192.168.1.${i} is up
m=(`expr $m + 1`)
else
echo 192.168.1.${i} is down
fi
done
echo "共有$m主机在线”
python版本多线程
import threading,subprocess,re,time
#定义要匹配的字符串
regex=re.compile("100% packet loss")
class mythread(threading.Thread):
def __init__(self,sta,end):
threading.Thread.__init__(self)
self.sta=sta
self.end=end
def run(self):
for i in range(self.sta,self.end):
out=subprocess.Popen("ping -c 1 -W 1 192.168.1.%s"%i,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out=out.stdout.read()
#匹配输出是否包含regex如果不包含则ping通
if len(regex.findall(str(out)))==0:
print("192.168.1.%s"%i +" is up")
else:
print(".",end=" ")
if __name__ == '__main__':
#可以使用线程池,这个分五个部分使用五个线程同时ping
print(time.ctime())
t1=mythread(1,50)
t2=mythread(50,100)
t3=mythread(100,150)
t4=mythread(150,200)
t5=mythread(200,255)
for i in t1,t2,t3,t4,t5:
i.start()
t1.join()
t2.join()
t3.join()
t4.join()
t5.join()
print(time.ctime())
多线程
import threading,time,subprocess,re,queue
regex = re.compile(r'\b0%')
def myping(q):
if semaphore.acquire():
if q.empty():
return
else:
num=q.get()
ping=subprocess.Popen("ping -c 1 -W 1 192.168.1.%s"% num,stdout=subprocess.PIPE,shell=True)
if len(regex.findall(str(ping.stdout.read())))!=0:
print("192.168.1.%s is up"% num)
semaphore.release()
if __name__ == '__main__':
q=queue.Queue()
print(time.ctime())
semaphore=threading.Semaphore(20)
for i in range(1,255):
q.put(i)
for i in range(256):
t=threading.Thread(target=myping,args=(q,))
t.start()
for i in range(256):
t.join()
print(time.ctime())