快速扫描端口与Python [关闭]

问题描述 投票:0回答:1

这是我的端口扫描器的代码:

from scapy.all import *
from datetime import datetime
import threading

threadlock = threading.Lock()

def TCPort(ip_addr, port):
    time = 1   # max time to send packages to a port is 1 seconds

    threadlock.acquire()
    pkt = IP(dst=ip_addr)/TCP(dport=port,flags="S")
    ans = sr1(pkt, timeout=time, verbose=0)
    if(str(type(ans))=="<type 'NoneType'>"):
        #port is closed
        pass
    elif ans.haslayer(TCP):
         if (ans.getlayer(TCP).flags=="A") or (ans.getlayer(TCP).flags=="SA"):
        # port sent a SYN or SYN-ACK answer, so answer with RST to close
        # the connection and print the port
        sr1(IP(dst=ip_addr)/TCP(dport=port,flags="S"), timeout=time, verbose=0)
        print port,"open".rjust(9-len(str(port)))
    threadlock.release()

#main
ip_addr = "192.168.1.33"

ports = range(1,500)
start = datetime.now()
print "Started on", start.strftime('%Y-%m-%d %H:%M:%S')

for port in ports:
    t1 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t2 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t3 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t4 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t5 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t6 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t7 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t8 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t9 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t10 = threading.Thread(target=TCPort, args=(ip_addr,port))
    t1.start()
    t2.start()
    t3.start()
    t4.start()
    t5.start()
    t6.start()
    t7.start()
    t8.start()
    t9.start()
    t10.start()
    t1.join()
    t2.join()
    t3.join()
    t4.join()
    t5.join()
    t6.join()
    t7.join()
    t8.join()
    t9.join()
    t10.join()

print "Finished on", datetime.now()-start

而不是做10个瓦尔的线程,我如何能够在较少的线路,少变量的线程?

***这个问题是编辑,以更具体的问题

***忽略这​​一段。该系统不要让我此帖的修改,因为我需要多写一些的话,那么你可以忽略这一段(顺便说一下,如果你读这个,我会很高兴,以了解如何在我绕过这个限制)

python multithreading scapy
1个回答
2
投票

我会建议基于池的方法,在那里你创建一组线程/进程的,然后养活他们要检查的端口。 Threading pool similar to the multiprocessing Pool?是如何与线程,这应该是你在这种情况下,需要做到这一点。这种管理大多数的线程对你的讨厌的部分。

© www.soinside.com 2019 - 2024. All rights reserved.