Crear un escáner de puertos en Python
Este tutorial demostrará cómo crear un escáner de puertos en Python.
Crear un escáner de puertos en Python
Primero, aprendamos los conceptos básicos de un puerto. Un puerto es un punto final en una red a través del cual se comunica cierta información entre un servidor y un cliente.
Un escáner de puertos es una aplicación simple que nos permite determinar qué puertos están abiertos para la comunicación en un host determinado.
Usando un escáner de puertos, podemos determinar qué puertos están abiertos para la conexión y conocer los servicios en ejecución de los puertos. Este tipo de herramienta ayuda a probar las medidas de seguridad contra posibles ataques de penetración.
La información se intercambia a través de Internet, generalmente utilizando los protocolos TCP y UDP. Los puertos varían en estos protocolos de 0 a 65535 y se dividen en tres rangos.
Los puertos del sistema varían de 0 a 1023, los puertos de usuario de 1024 a 49151 y cada puerto por encima de este es un puerto dinámico.
Con un escáner de puertos, verificaremos individualmente cada puerto para la conexión y si la conexión es exitosa. Analicemos cómo lograr esto en Python.
-
Importaremos el módulo
socket
. -
Crearemos un objeto
socket
e intentaremos conectarnos a puertos para un servidor host determinado. -
Emplearemos un bucle
for
para iterar sobre el rango de puertos e intentar una conexión para cada puerto individualmente. -
Crearemos una función para probar la conexión y utilizaremos un bloque
intentar
yexcepto
para devolverTrue
yFalse
en función del éxito de la conexión. -
En el bloque
try
, intentaremos crear una conexión utilizando la funciónsocket.connect()
. Si la conexión es exitosa, el bloque devolveráTrue
. -
Si la conexión no tiene éxito, se generará una excepción, atrapada en el bloque “excepto”, y se devolverá “False”.
Esto se implementa en el siguiente código.
import socket
t = "https://www.hackthissite.org/"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def check_port(port):
try:
c = s.connect((t, port))
return True
except:
return False
for a in range(200):
if check_port(a):
print("Port", a)
El código anterior verificará los primeros 200 puertos para ver si hay algún puerto abierto para la conexión. Tenga en cuenta que solo debemos buscar hosts que nos permitan hacerlo.
Podemos modificar nuestro simple escáner de puertos y agregar algunas características interesantes. Podemos usar la función socket.settimeout()
para establecer el tiempo de espera proporcionando el tiempo en la función.
La conexión se cancela si tarda más tiempo que el establecido por esta función.
Otra forma de mejorar el rendimiento del escáner de puertos en Python es utilizar el concepto de subprocesos múltiples. El módulo threads
en Python se puede usar para crear y administrar hilos que pueden dar más concurrencia a la aplicación y mejorar el tiempo de ejecución.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn