Я учусь писать сканер 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')