2016-04-14 3 views
-1

Quand je lance ce code que je reçois cette erreur de socket:python3 portscanner ne peut pas résoudre la prise pr0blem

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

mais même si je supprime le s.close() il me donne des résultats erronés.

Il est un scanner de port qui va essayer de vous connecter à tous les ports sur le serveur que je veux analyser. Et ceux dont j'obtiens la connexion sont stockés dans une liste. Mais pour une raison quelconque, cela me donne des résultats erronés. quelqu'un peut-il m'aider s'il vous plaît.

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) 

Répondre

0

C'est parce que vous fermez votre prise à l'intérieur de la boucle avec s.close() et vous n'êtes pas l'ouvrir à nouveau et vous essayez de vous connecter avec un socket qui est déjà fermé. vous devez fermer la prise lorsque vous avez terminé à la fin de la boucle, i a également modifié votre code pour OpenPorts global et de supprimer la variable port inutile que vous définissez et incrément dans votre boucle

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

Merci cela a résolu le problème. – Hagge15

+0

envisager d'accepter ma réponse si cela a fonctionné pour vous :) – danidee