Port scanner

Stato
Discussione chiusa ad ulteriori risposte.

!R~

Utente Silver
22 Maggio 2009
0
0
0
55
So che ci sono migliaia di port scanner, l'ho fatto perchè non avevo un pazzo da fare :D
Codice:
import socket, re

class Scanner():
    def __init__(self):
        self.host = raw_input("Host to scan: ")
        self.list = []
                         
    def full_scan(self):
        self.port1 = int(raw_input("Initial port: "))
        self.port2 = int(raw_input("Final port: "))
        print "Scanning port on", socket.gethostbyname(self.host)
        for self.i in range(self.port1, self.port2):
            self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.scan = self.s.connect_ex((self.host, self.i))
            if self.scan == 0:
                print "Port %d: OPEN" % (self.i)
                self.list.append(self.i)
            self.s.close()
        if len(self.list) == 0:
            print "Scanning completed: no port open."
        else:
            print "Scanning completed."
        

    def scan(self):
        self.port = int(raw_input("Port: "))
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.scan = self.s.connect_ex((self.host, self.port))
        if self.scan == 0:
            print "Port %d: OPEN" % (self.port)
        else:
            print "Port %d: CLOSED" % (self.port)
        self.s.close()

# main
main = Scanner()
command = raw_input("Type  FULL SCAN to scan a range of port -- type SCAN to scan a single port\n>>> ")
if re.match("FULL SCAN", command):
    main.full_scan()
elif re.match("SCAN", command):
    main.scan()
else:
    print "Invalid choice"
 
(passa a 3.0)

nn male, devo documentarmi su connect_ex, ma presumo restituisca un bool a seconda se la connessione riesce o meno, giusto?
 
connect_ex( address)
Come connect(address), ma restituisce un indicatore di errore invece di sollevare un'eccezione, per errori restituiti dalla chiamata connect() a livello C (altri problemi, come ``host not found'', possono ancora sollevare eccezioni). L'indicatore di errore è 0 se l'operazione ha avuto successo, altrimenti viene indicato della variabile errno. Ciò torna utile per supportare, ad esempio, connessioni asincrone.
 
Stato
Discussione chiusa ad ulteriori risposte.