-1

このコードを実行すると、次のソケット エラーが発生します。

[WinError 10038] ソケットではないものに対して操作が試行されました

しかし、削除しても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)
4

1 に答える 1

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()
于 2016-04-14T17:18:00.467 に答える