Не работает проверка if not in

for host in hosts:
    with open(f'current_{host}', 'r') as ex_ports:
        ex_ports = ex_ports.readlines()
        for line in ex_ports:
            ports.append(line.strip('\n').strip())

    with open(f'current_{host}', 'w') as c_host:
        print (f'{host} : {ports}')
        for port in range(1, 65535):
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(1)
            result = sock.connect_ex((host, port))
            if result == 0:
                if port not in ports:
                    message = f"Host: {host}, Port: {port} is open."
#                       send_telegram_message(telegram_token, chat_id, message)
                    print (port)
                c_host.write (f'{port}\n')

Почему на срабатывает проверка if not in? Подобный метод и раньше использовал, все работало. В этом коде выдает все открытые порты, не обращая внимание на это сравнение.


Ответы (1 шт):

Автор решения: proffessor17

Исправить можно двумя способами:

  1. Преобразовать строки в числа при чтении:
    with open(f'current_{host}', 'r') as ex_ports:
        ex_ports = ex_ports.readlines()
        for line in ex_ports:
            ports.append(int(line.strip('\n').strip()))
    
  2. Или преобразовать port в строку при сравнении:
    if str(port) not in ports:
    
→ Ссылка