Python 端口扫描(全链接扫描,多线程)

from socket import *
import threading      #导入线程相关模块

lock = threading.Lock()
openNum = 0
threads = []              #定义线程列表

def portScanner(host,port):
    global openNum
    try:
        s = socket(AF_INET,SOCK_STREAM)
        s.connect((host,port))
        lock.acquire()        #由于openNum是个全局变量,每一个线程不能对openNum 同时操做,只有得到所的线程才能够操做 openNum
        openNum+=1
        print('[+] %d open' % port)
        lock.release()        #线程对全局变量openNum操做完成后,须要释放所,其余线程才能够继续修改全局变量openNum
        s.close()
    except:                     #若是端口没开,那么就直接pass,不执行其余输出操做。
        pass

def main():
    setdefaulttimeout(1)
    ports = [20, 21, 22, 23, 80, 111, 3306]     #定义要扫描的端口,也能够在for中使用range进行定义,看我的需求,例如 for p in range(1,1024): 
    for p in ports:
        t = threading.Thread(target=portScanner,args=('192.168.60.130',p))
        threads.append(t)
        t.start()

    for t in threads:        #等待线程列表中的因此线程的执行完毕
        t.join()

    print('[*] The scan is complete!')
    print('[*] A total of %d open port' % (openNum))

if __name__ == '__main__':
    main()

若是要计算扫描了多久的话,能够导入time模块,而后 程序开始运行的时间 减去 程序结束运行的时间 最后输出时间的差。app

相关文章
相关标签/搜索