python多线程扫描端口示例

yipeiwu_com6年前Python基础

复制代码 代码如下:

# -*- coding: cp936 -*-
import socket
from threading import Thread,activeCount,Lock
from time import ctime
mutex = Lock()

class Loop(Thread):
    def __init__(self,ip,port,que):
        Thread.__init__(self)
        self.ip     = ip
        self.port   = port
        self.que    = que

    def run(self):
        global mutex
        try:
            client = socket.socket()
            indicator = client.connect_ex((self.ip,self.port))
            if mutex.acquire(1):
                if indicator == 0:
                    que.append(self.ip+'\t'+str(self.port))
                else:
                    print self.ip,'\t',str(self.port),'不可达'
                mutex.release()
        except:
            if mutex.acquire(1):
                print self.ip,'\t',str(self.port),'不可达'
                mutex.release()

class Main(Thread):
    def __init__(self,ip,que):
        Thread.__init__(self)
        self.ip  = ip
        self.que = que

    def run(self):
        i = 0
        while i < 65536:
            if activeCount() <= 200:
                Loop(ip=self.ip,port=i,que=self.que).start()
                i = i + 1

if __name__ == '__main__':
    que = []
    ip = raw_input('IP=')

    main = Main(ip = ip,que = que)
    main.start()

    while True:
        if activeCount() <= 1 and main.isAlive() == False:
            break

    print ''
    f = open('portOpen.py','a')
    f.write("'''")
    f.write(ctime()+'\n')
    f.flush()
    for i in range(0,len(que)):
        print que[i]
        f.write('\t'+que[i]+'\n')
        f.flush()
    f.write("'''")
    f.close()

    raw_input()

'''Mon Jan 13 07:12:53 2014
 localhost 135
 localhost 1028
 localhost 8048
 localhost 8080
 localhost 8181
 localhost 8730
 localhost 12040
 localhost 12897
 localhost 18040
 localhost 18611
''''''Tue Jan 14 10:04:58 2014
 localhost 135
 localhost 1028
 localhost 8048
 localhost 8080
 localhost 8181
 localhost 12897
 localhost 18040
 localhost 18611
'''

相关文章

python binascii 进制转换实例

如下所示: #coding:utf-8 import binascii a = 'worker' #先把worker转换成二进制数据然后在用十六进制表示 b = binasc...

如何使用python3获取当前路径及os.path.dirname的使用

这篇文章主要介绍了如何使用python3获取当前路径及os.path.dirname的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

Python 异常处理Ⅳ过程图解

Python 异常处理Ⅳ过程图解

异常的参数 一个异常可以带上参数,可作为输出的异常信息参数。 你可以通过except语句来捕获异常的参数,如下所示: 变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接...

pygame实现俄罗斯方块游戏(基础篇3)

pygame实现俄罗斯方块游戏(基础篇3)

上一章请点击查看:pygame实现俄罗斯方块游戏(基础篇2) 现在继续 一、给每个方块设置不同的颜色 根据代码这里可以判断正在下落的方块在那些Block子类里加一个属性最合适,而已经落下...

如何用python写一个简单的词法分析器

如何用python写一个简单的词法分析器

编译原理老师要求写一个java的词法分析器,想了想决定用python写一个。 目标 能识别出变量,数字,运算符,界符和关键字,用excel表打印出来。 有了目标,想想要怎么实现词法分析器...