这是我的端口扫描程序代码:
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个var操作,如何在更少的行和更少的变量中执行线程?
***此问题已编辑为更具体的问题
***忽略此段落。系统不允许我发布编辑内容,因为我需要再写一些单词,因此您可以忽略此段(顺便说一句,如果您阅读此段,我将很高兴学习如何绕过此限制)>
答案 0 :(得分:2)
我建议您使用基于池的方法,在此方法中,您将创建一组线程/进程,然后向它们提供要检查的端口。 Threading pool similar to the multiprocessing Pool? 使用线程的方法是什么,在这种情况下,这应该是您所需要的。这可以为您管理大部分烦人的线程。