端口扫描器 - 无法将所有打开的端口添加到变量(列表)

Port Scanner - Can't Add All Opened Ports To A Variable (List)

我的代码不会显示包含所有已打开端口的 opened_ports 列表。 (我认为它甚至没有增加价值。(也许覆盖?)) 我已经尝试了一些方法,但没有任何效果。

顺便说一句:有没有办法对 "Port x is closed." 进行排序?

输出:

...
Port 97 is closed.
Port 100 is closed.

All opened ports within the selected range:
[]

代码:

import socket, threading, time
from queue import Queue

print_lock = threading.Lock()

target = input('Target:' + ' ')
workers = input('Workers:' + ' ')
first_port = input('First port:' + ' ')
last_port = input('Last port:' + ' ')

if first_port == 'min':
    first_port = 1
if last_port == 'max':
    last_port = 65536

print('\n' + 'Scanning...' + '\n')

def scan(port):
    soccer = socket.socket(socket.AF_INET, socket. SOCK_STREAM)
    try:
        connection = soccer.connect((target, port))
        with print_lock:
            print('Port' + ' ' + str(port) + ' ' + 'is opened.')
            time.sleep(5)
            opened_ports = opened_ports + port
        connection.close()
    except:
        with print_lock:
            print('Port' + ' ' + str(port) + ' ' + 'is closed.')

def thread():
    while True:
        worker = queue.get()
        scan(worker)
        queue.task_done()

queue = Queue()
opened_ports = []

for x in range(int(workers)):
    threader = threading.Thread(target = thread)
    threader.daemon = True
    threader.start()

for worker in range(int(first_port), int(last_port)):
    queue.put(worker)

queue.join()

print('\n' + 'All opened ports within the selected range:' + '\n' + '\n' +
      str(opened_ports))

只需将 opened_ports = opened_ports + port 更改为 opened_ports.append(port)