Скрипт прекращает проверку портов после того, как один порт обнаружен как открытый - PullRequest
0 голосов
/ 20 сентября 2019

Я знаю, что это, вероятно, действительно простое исправление, но я не могу думать о том, что я сделал неправильно.Я в тупике.После того, как порт обнаруживает, что один порт открыт, кодовый спам «не открыт», несмотря на то, что некоторые из этих портов фактически открыты.

Например, порты 135 и 445 открыты в моей сети.Когда я ввожу сканирование между 135 и 445, компьютер даже не сканирует порты, он просто спамит, что все после 135 не открыто, включая 445.

Уже пробовал:

  • Указание переменной результата в операторах if и else вместо отдельной строки кода.

  • Изменение строки spn = spn + 1 на "port"


while True:
   #Shortens string of code.
   sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   #The IP address that will be implemented into the result.
   ip = str(input("\nCheck IP Address: ")).strip()
   #The port number that will be implemented into the result.
   port = int(input("\nCheck Port: "))
   #What the script is going to check.
   result = sock.connect_ex((ip, port))


   #If user types 0, a complete scan will occur.
   if port == 0:

   #Highest/lowest port to check.
      spn = int(input("\nStarting port: "))
      fpn = int(input("\nFinal port: "))
      print(" ")
      result = sock.connect_ex((ip, spn))
      while spn <= fpn:

   #Prints which ports are open.
         if result == 0:
            print (("Port ") + str(spn) + (" is OPEN"))         

   #Prints which ports are not open.
         else:
            print (("Port ") + str(spn) + (" is NOT OPEN"))

         result = sock.connect_ex((ip, spn))
         spn = spn + 1


   else:
   #Prints if ONE port is open.
      if result == 0:
         print (("\nPort ") + str(port) + (" is OPEN"))

   #Prints if ONE port is not open.
      else:
         print (("\nPort ") + str(port) + (" is NOT OPEN"))

Код должен иметь возможность проверять каждый порт отдельно, а не произносить все слова после открытия первого порта.

1 Ответ

1 голос
/ 20 сентября 2019

Вы не можете использовать ваш объект sock таким образом.После первого успешного подключения сокет подключается и не может просто подключиться снова.Вот почему все дальнейшие соединения терпят неудачу.Я бы порекомендовал заменить result = sock.connect_ex((ip, spn)) на это:

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    result = sock.connect_ex((ip, spn))
    if result: sock.shutdown(socket.SHUT_RDWR)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...