2016-04-14 6 views
-1

Когда я запускаю этот код я получаю эту ошибку сокета:Python3 сканер портов не может решить сокет pr0blem

[WinError 10038] An operation was attempted on something that is not a socket

, но даже если я удалить s.close() это дает мне неправильные результаты.

Это сканер портов, который попытается подключиться ко всем портам на сервере, который я хочу отсканировать. И те, с которыми я получаю соединение, хранятся в списке. Но почему-то это дает мне неправильные результаты. может кто-то, пожалуйста, помогите мне.

import socket 
import threading 

def scan_for_open_ports(): 
    #Creating variables 
    OpenPorts = [] 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    host = input('Host to scan: ') 
    global port 
    global OpenPorts 
    port = 1 
    #Scanning 
    for i in range(65534): 

     try: 

      s.connect((host, port)) 
      s.shutdown(2) 
      OpenPorts.append(port) 
      print(str(port) + 'is open.') 
      s.close() 
      port += 1 
     except socket.error as msg: 
      print(msg) 
      s.close() 
    show_user() 
def show_user(): 
    #Giving the user results 
    print('------Open porst-----\n') 
    print(OpenPorts) 

ответ

0

Это потому, что вы закрываете свой сокет внутри цикла с s.close() и вы не открывая его снова, и вы пытаетесь соединиться с розеткой, которая уже закрыта. вы должны закрыть сокет, когда вы сделали с ним в конце цикла, я также внес поправки в свой код, чтобы сделать OpenPorts глобальным и удалить ненужные port переменными вы определяете и приращение внутри вашего для петли

import socket 

OpenPorts = [] 


def scan_for_open_ports(): 

    # Creating variables 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    host = input('Host to scan: ') 

    # Scanning 
    for port in range(1, 65534): 
     try: 
      s.connect((host, port)) 
      OpenPorts.append(port) 
      print(str(port) + 'is open.') 
     except socket.error as msg: 
      print(msg) 
    s.close() 

    show_user() 


def show_user(): 
    # Giving the user results 
    print('------Open ports-----\n') 
    print(OpenPorts) 

scan_for_open_ports() 
+0

Спасибо что решило проблему. – Hagge15

+0

подумайте о принятии моего ответа, если он сработает для вас :) – danidee

 Смежные вопросы

  • Нет связанных вопросов^_^