1
resposta

scapy syn scan muito lento e repetindo porta

Meu código de um syn scan está printando portas repetidas e executando muito lento mesmo tendo adicionado multithreading:

from scapy.all import *
import threading

aim = input('Informe o IP ou URL')
ports = [21,22,23,25,80,110,139,143,145,445,1194,3306,3389]
for p in ports:
    for i in range(500):
        resp = sr1(IP(dst=aim)/TCP(sport=53,dport=p,flags="S"))
        if resp is not None:
            print('Open', p)
        else:
            print('closed', p)
threading.Thread(target=aim).start()

    

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

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:

  1. Criei uma função syn_scan que realiza o scan de uma única porta.
  2. Utilizei threading para cada porta, criando uma nova thread para cada uma.
  3. Adicionei um timeout no sr1 para evitar que ele fique esperando indefinidamente por uma resposta.
  4. 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 ✓.