2016-04-14 33 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