Olá Andre, tudo bem?
Vamos tentar resolver isso.
Primeiro, o problema da repetição das portas pode estar relacionado ao fato de que você está executando o sr1
500 vezes para cada porta, o que não é necessário. Além disso, a maneira como você está utilizando threading
não está correta. Você deve criar threads para cada porta a ser escaneada, e não para o endereço IP.
Aqui está uma versão revisada do seu código que utiliza threading corretamente e evita a repetição das portas:
from scapy.all import *
import threading
def syn_scan(ip, port):
resp = sr1(IP(dst=ip)/TCP(sport=53, dport=port, flags="S"), timeout=1, verbose=False)
if resp is not None and TCP in resp and resp[TCP].flags == 0x12:
print(f'Open {port}')
else:
print(f'Closed {port}')
def main():
aim = input('Informe o IP ou URL: ')
ports = [21, 22, 23, 25, 80, 110, 139, 143, 145, 445, 1194, 3306, 3389]
threads = []
for port in ports:
t = threading.Thread(target=syn_scan, args=(aim, port))
threads.append(t)
t.start()
for t in threads:
t.join()
if __name__ == "__main__":
main()
Algumas mudanças importantes:
- Criei uma função
syn_scan
que realiza o scan de uma única porta. - Utilizei
threading
para cada porta, criando uma nova thread para cada uma. - Adicionei um
timeout
no sr1
para evitar que ele fique esperando indefinidamente por uma resposta. - Adicionei
verbose=False
para evitar a impressão de mensagens desnecessárias do Scapy.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.