Es un escaner de puertos muy sencillo
Código #
import socket
import sys
from termcolor import colored
host = input("IP: ")
port_1 = int(input("\nPrimer puerto: "))
port_2 = int(input("\nÚltimo puerto: "))
def connection():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
return s
def port_scanner(port):
s = connection()
try:
s.connect((host, port))
print(colored("\n> ", 'green') + "El puerto %d esta abierto" % (port))
except socket.timeout:
print(colored("\n< ", 'red') + "Se ha excedido el tiempo de espera")
sys.exit()
except ConnectionRefusedError:
pass
except socket.gaierror:
print(colored("\n< ", 'red') + "La IP no es válida")
sys.exit()
except KeyboardInterrupt:
sys.exit()
s.close()
def ports():
threads = []
for port in range(port_1, port_2):
port_scanner(port)
def main():
ports()
if __name__ == '__main__':
main()
Cómo funciona? #
1. Entrada de IP y rangos de puertos: #
- El usuario ingresa la dirección IP que desea escanear (
host
). - Luego, ingresa el rango de puertos que desea escanear, especificando el primer (
port_1
) y el último puerto (port_2
).
2. Función connection()
:
#
connection()
crea y configura un socket TCP (SOCK_STREAM
) con un tiempo de espera (settimeout
) de 1 segundo.- Retorna el objeto socket
s
.
3. Función port_scanner(port)
:
#
port_scanner(port)
verifica la conexión al puerto específicoport
en la IPhost
.- Usa
connection()
para obtener un nuevo socket. - Intenta establecer una conexión (
s.connect((host, port))
). - Si hay un
socket.timeout
, indica que se ha superado el tiempo de espera para ese puerto y sale del programa consys.exit()
. - Si hay un
ConnectionRefusedError
, significa que la conexión fue rechazada y pasa al siguiente puerto. - Si hay un
socket.gaierror
, indica que la IP no es válida y sale del programa consys.exit()
. - Cierra el socket
s
al finalizar.
4. Función ports()
:
#
ports()
itera a través de todos los puertos en el rango especificado (port_1
aport_2
).- Para cada puerto, llama a
port_scanner(port)
para verificar la conexión.