我正在尝试用Python为SSH制作端口扫描程序。我正在使用threading
模块来加快速度。然而,我遇到了一个问题,它停止扫描IP,并且扫描它们的速度非常慢,就像没有多线程一样。在某个时刻,我等了2分钟,我的电脑开始落后。然后,20秒后,程序完成了扫描,但我很确定从那时起我改变了一些重要的事情。当它完成时,我还观察到,使用SSH的IP列表的长度等于线程数(15000),这对于变量来说不是问题,因为每次程序成功连接到一个带有22端口的IP时,它都会将该IP附加到一个列表中,然后我从中获得长度,这个IP范围应该有很多SSH IP(有人得到了45000个),所以它可能在某种程度上限制了数量
print_lock = threading.Lock()
ip_list = []
SSH_ips = []
time_start = datetime.now()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def scan(ip_number):
ip_try = ip_list[ip_number]
c = ip_try.split(".")
percentage = (ip_number / len(ip_list)) * 100
d = "Scanning " + c[0] + "." + c[1] + "." + c[2] + (".* [IPs found: %d] [%d%% done]" % (len(SSH_ips), percentage))
print(d, end="\r")
try:
conn = sock.connect_ex((ip_try,22))
if conn == 0:
with print_lock:
SSH_ips.append(ip_try)
else:
pass
except:
pass
def gulag():
while True:
worker = q.get()
scan(worker)
q.task_done()
q = Queue()
t = threading.Thread(target=gulag)
t.daemon = True
for x in range(int(sys.argv[2])):
t = threading.Thread(target=gulag)
t.daemon = True
t.start()
for worker in range(0, 65026):
q.put(worker)
q.join()
time_finish = datetime.now()
time_elapsed = time_finish - time_start
ip_list_length = len(SSH_ips)
SSH_ips.sort()
SSH_ips = list(set(SSH_ips))
print("Found %s IPs in %s." % (ip_list_length, time_elapsed));
print(SSH_ips)
目前没有回答
相关问题 更多 >
编程相关推荐