2016-04-14 54 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变量定义,并增加你的内部for循环

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