Python|threading结合queue多线程实现全端口简易扫描

主要利用threading结合queue的特性构建多线程框架,重写threading的run发发,利用socket模块验证端口是否开启

import threading
import queue
import sys, os
from socket import *
import time
class portscan(threading.Thread):
    def __init__(self, q):
        threading.Thread.__init__(self)
        self.__queue = q

    def run(self):
        while not self.__queue.empty():
            port = self.__queue.get()
            self.brute(port)

    def brute(self, port):
        host='192.168.78.180'
        s=socket(AF_INET,SOCK_STREAM)
        s.settimeout(5)
        # sys.stdout.write("---------------当前进程名称:%s,正在扫描端口:%s-----------------\n" %(self.name,port))
        try:
            s.connect((host, port))
            sys.stdout.write("[*]Port:%d open \n" % (port))
            sys.stdout.flush()
            with open(r'openport.txt','a+') as f:
                f.write("[*]Port:%d open \n" % (port))
            s.close()
        except:
            s.close()
        if port>=65536:
            stop_time = time.time()
            print("[*]cost time %s" % (stop_time - start_time))
            os._exit(0)

def main():
    global start_time
    start_time=time.time()
    threads = []
    thread_num = 1000
    q = queue.Queue()

    for i in range(1,65537):
        q.put(int(i))

    for t in range(thread_num):
        t = portscan(q)
        threads.append(t)

    for i in threads:
        i.start()

    for i in threads:
        i.join()

if __name__ == "__main__":
    main()

查看目标机器开放端口:
在这里插入图片描述
扫描结果:

[*]Port:21 open 
[*]Port:22 open 
[*]Port:23 open 
[*]Port:111 open 
[*]Port:2049 open 
[*]Port:3306 open 
[*]Port:5900 open 
[*]Port:6379 open 
[*]Port:8080 open 
[*]Port:8081 open 
[*]Port:8989 open 
[*]Port:9000 open 
[*]Port:9200 open 
[*]Port:11211 open 
[*]Port:22222 open 
[*]Port:35954 open 
[*]Port:38667 open 
[*]Port:39725 open 
[*]Port:41920 open 
[*]Port:43971 open 

1000个线程耗时65秒多扫完65535个端口
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值