Почему я должен поместить задержку в мой код Python, чтобы сканирование SYN работало правильно - PullRequest
0 голосов
/ 29 апреля 2020

Я учусь писать сканер SYN на Python, и я очень плохо знаком с языком Python. Я использую модуль Scapy и команду sr1 для отправки пакета, но я написал этот код, используя Python модуль Socket, и у меня та же проблема.

Код будет отправлять пакеты с флагами пакетов, установленными в 'S'. Если ответа пакета нет, ничего не делайте и продолжайте 'For' l oop и найдите следующий номер порта для сканирования из списка в переменной List "common_ports".

Если получен ответ пакета, я проверяю, что для флагов TCP установлено значение "SA", и если это так, выведите "Port is Open", тогда открытый порт сохраняется в списке "open-ports".

My Issue при запуске программы она найдет первый открытый порт 80 и отобразит его, но не найдет последовательные открытые порты. Когда я запустил это через отладчик Pycharm, он работал нормально и нашел порт 80, а также порт 443.
После попытки выяснить это я добавил оператор time.sleep (7), и все работает нормально, но если я изменил этот 7 на меньшее число код не находит второй номер порта 443.

Мой вопрос: почему я должен добавить задержка в программу, чтобы она заработала? (Задержка 7 секунд чрезмерна). Я заметил, что на некоторых других сайтах я могу уменьшить задержку до 3, и код будет работать.

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 13 23:08:11 2020

@author: xyplex

"""
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

from scapy.all import *
import time


host_address = "www.hackthissite.org"
open_ports = []

common_ports = [23, 80, 443]

print('Scanning '+host_address+' for open TCP ports')

start_time = time.time()

for x in common_ports:
    packet = IP(dst=host_address)/TCP(dport=x, flags='S')
    response = sr1(packet,timeout=0.5,verbose=0)
    if response != None:
        if TCP in response and response[TCP].flags == 'SA':
            print('\nPort '+str(x)+' is open')
            open_ports.append(x)
            sr1(IP(dst=host_address)/TCP(dport=response.sport,flags='R'),timeout=0.5,verbose=0)
            time.sleep(7)

print('\nScan is Complete !!!!!\n')

if open_ports:
    print("\n\nOpen Ports Found: -----> ", sorted(open_ports))
else:
    print("Sorry, No open ports found.!!!")

print('\nTotal Time to Execute = %s' % (time.time() - start_time) + ' Seconds')


...