Boa tarde, galera. Estou postando aqui um código de portscan que eu fiz utilizando threads para quem quiser usar ou aprimorar. Ainda estou aprendendo usar Python e com certeza o código precisa ser melhorado porque possui um erro em relação as threads que as vezes uma executa a mesma coisa que a outra. Também estou com uma dúvida, quando ela passa pelas portas 80 e 443, que são portas que permanecem abertas por padrão, não reconhece. Alguém saberia me dizer porque? Segue o código:
import threading
import random
import socket
import array
import sys
IP = raw_input("Entre com o ip:")
INICIO = int(raw_input("Entre com o inicio:")) #digite um ip
FIM = int(raw_input("Entre com o final:"))
class Escaneia(threading.Thread):
def __init__(self, IP, INICIO, FIM, MINI, MAXI, TIME):
threading.Thread.__init__(self)
self.IP = IP
self.INICIO = INICIO
self.FIM = FIM
self.MINI = MINI
self.MAXI = MAXI
self.TIME = TIME
def run(self):
try:
for i in range(INICIO,FIM):
NUM = str(i)
HOST = IP+NUM
PORT = 0
#varrendo as portas
for PORT in range(Send_min, Send_max):
try:
#print "varrendo..."
#criando o socket
tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#conectando....
res = tcp.connect_ex((HOST, PORT))
#print "\n", PORT
#name = socket.gethostname()
#caso seja diferente de zero, a porta esta fechada
if res == 0:
print "IP: ", HOST, "\nporta: ", PORT, "aberta"
tcp.close()
thrd = threading.Timer(float(self.TIME), self.timef)
thrd.start()
thrd.join()
except:
print "ERRO!!!!"
except:
print "Erro ao scanear"
def timef(self):
return 0
qtdThread = 8
qtdPortas = 1024
contThread = qtdPortas/qtdThread
threadrun = ["string", (1), 1, 1, 1, 1.0]*qtdThread
MINI = array.array('i',(0 for i in range(0,qtdThread)))
MAXI = array.array('i',(0 for i in range(0,qtdThread)))
for i in range(0,qtdThread):
MINI = (contThread * i)
MAXI = (contThread *(i+1)-1)
Send_min = MINI
Send_max = MAXI
threadrun = Escaneia(IP, INICIO, FIM, Send_min, Send_max, 0.001)
threadrun.start()
Abração.