zoukankan      html  css  js  c++  java
  • 多线程实现ping扫描

    代码:

    # coding=utf-8
    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 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-------------------'
  • 相关阅读:
    简单二分求解(木板补漏问题)
    switch语句和for循环
    JAVA运算符和优先级
    JAVA数据类型
    JAVA基础
    JAVA开发环境
    linux配置IP地址
    LVM逻辑分区
    用户和用户组
    第一天
  • 原文地址:https://www.cnblogs.com/hupeng1234/p/6729810.html
Copyright © 2011-2022 走看看