Как мне l oop порты для сканирования? - PullRequest
1 голос
/ 09 марта 2020

У меня проблема с сканером портов, который постоянно зависает при сканировании порта 1. Как я могу решить эту проблему?

    #! /usr/bin/env python

    import socket 
    import subprocess
    from datetime import datetime

    #Clear the screen
    subprocess.call('clear', shell=True)

    def portscan():
        server = raw_input("Enter the server to scan: ")
        serverIP = socket.gethostbyname(server)

        # Printing banner with information about host
        print "[+] Host: {} [+]\nIP Address: {}\n".format(server, serverIP)
        print "[!] Please wait, scanning for open services...\n"

        #Time when scan started.
        t1 = datetime.now()

        try:
            for port in range(1, 1024):
                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                result = sock.connect_ex((serverIP, port))
                if result == 0:
                    print "[+] Port {}: Status:OPEN\n".format(result)
                    sock.close()

        except socket.gaierror:
            print "Hostname could not be resolved, Exiting...\n"
            sys.exit()

        except socket.error:
           print "Couldn\'t connect to server, Exiting\n"
           sys.exit()

        #Checking time again
        t2 = datetime.now()
        #Calculate duration of scan
        totaltime = t2 - t1

        print "Scan completed, duration: {}\n".format(totaltime)  

Что происходит, когда я запускаю его, я даю ему имя хоста и решаю это IP-адрес, но всякий раз, когда начинается сканирование, он продолжает сканировать порт 1, как я видел в Wireshark

1 Ответ

1 голос
/ 10 марта 2020

Я думаю, что вам, возможно, понадобится timeout.

В конце концов, ваше sock.connect_ex( ) будет вызывать исключение socket.error: [Errno 110] Connection timed out, как вы можете прочитать об этом, в этом ответе .

Но время ожидания по умолчанию может быть 120 секунд, и, возможно, вы не хотите ждать так много. Таким образом, вы можете установить свой собственный тайм-аут, например:

try:
    for port in range(1, 1024):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(10) #timeout set for wait up 10 seconds.
        result = sock.connect_ex((serverIP, port))
        sock.settimeout(None)

Чтобы узнать, зачем использовать sock.settimeout(None), и посмотреть другие способы установки timeout, вы можете прочитать это обсуждение .

Я не уверен, что это то, что вы ищете, но я надеюсь, что это может помочь.

...