本文实例讲述了Python基于多线程实现ping扫描功能。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# -*- coding:utf-8 -*-
#! python2
import subprocess
from Queue import Queue
import threading
class Pinger( object ):
def __init__( self , ip_list, thread_num = 2 ):
self ._ip_list = ip_list
self ._thread_num = thread_num
self ._queue = Queue( len (ip_list))
def ping( self , thread_id):
while True :
if self ._queue.empty():
break
addr = self ._queue.get()
print 'Thread %s: Ping %s' % (thread_id, addr)
ret = subprocess.call( 'ping -c 1 %s' % (addr),
shell = True ,
stdout = open ( "/dev/null" , 'w' ),
stderr = subprocess.STDOUT)
if ret = = 0 :
print '%s: is still alive' % addr
else :
print '%s: did not respond ' % addr
self ._queue.task_done() #unfinished tasks -= 1
def run( self ):
for ip in self ._ip_list:
self ._queue.put(ip) #unfinished_tasks += 1
print '---------------------task begin------------------'
for i in range ( self ._thread_num):
thrd = threading.Thread(target = self .ping, args = (i + 1 ,))
#thrd.setDaemon(True)
thrd.start()
self ._queue.join() # 主线程一直阻塞,一直等到Queue.unfiinshed_tasks == 0
print '---------------------task done-------------------'
|
希望本文所述对大家Python程序设计有所帮助。
原文链接:http://www.cnblogs.com/hupeng1234/p/6729810.html