2016-04-14 8 views
-1

を解決することはできません私はこのコードを実行すると、私はこのソケットエラー取得しています:のpython3ポートスキャンがソケットpr0blem

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

を私はs.close()を削除しても、それは私に間違った結果が得られます。

スキャンするサーバー上のすべてのポートに接続しようとしているポートスキャナーです。そして、私が接続しているものはリストに保存されています。しかし何らかの理由で私に間違った結果をもたらしています。誰かが私を助けてくれますか?あなたは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

。あなたは、ループの終わりにそれで終わったときに、私はまた、あなたのコードを修正しOpenPortsをグローバルにし、ループ

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

のためにあなたの内側に不要なportユーザーが定義変数と増分を削除するためにソケットを閉じる必要がありますありがとう問題を解決した – Hagge15

+0

あなたのために働いた場合、私の答えを受け入れることを検討:) – danidee

関連する問題