本文实例讲述了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